Guy*_*che 2 c# xml linq linq-to-xml silverlight-4.0
我有完全像这种格式的XML:
<?xml version="1.0" encoding="utf-8"?>
<book>
<chapter>
<verse>This is verse 1</verse>
<verse>This is verse 2</verse>
<verse>This is verse 3</verse>
<verse>This is verse 4</verse>
</chapter>
<chapter>
<verse>This is verse 1</verse>
<verse>This is verse 2</verse>
</chapter>
<chapter>
<verse>This is verse 1</verse>
</chapter>
</book>
Run Code Online (Sandbox Code Playgroud)
在使用Linq的C#中,我需要能够根据函数state.getChapterNumber()的值获取特定位置或索引的XML元素.例如,如果值为4,我需要从XML文档中获取第4章元素.
XDocument book = XDocument.Load(string.Format("Translations/NWT/{0}.xml", state.BookName));
var verses = from chapter in book.Decendants()
where state.getChapterNumber() == (WHAT DO I PUT HERE TO MATCH THE VALUE??)
from verse in chapter.Descendants("p").Elements()
select new
{
VerseNumber = verse.Attribute("n").Value,
Text = verse.Value,
LastVerseInParagraph = verse.Parent.Elements().LastOrDefault().Value,
FirstVerseInParagraph = verse.Parent.Elements().FirstOrDefault().Value
};
Run Code Online (Sandbox Code Playgroud)
请帮助,这非常重要,并且已经让我好几天了.我想做的就是能够从书中选择的任何章节中得到经文.
Jon*_*eet 10
好吧,首先,我不认为你想要第二个后代整体 - 你想要第二章,这不一定是同一件事.幸运的是,这很容易做到:
// Use 1 for the second chapter, 2 for "element 2" (i.e. the third element) etc
var chapter = book.Descendants("chapter").ElementAt(1);
var verses = from verse in chapter...
Run Code Online (Sandbox Code Playgroud)
编辑:对于经文编号,使用其重载Select提供元素索引:
var verses = chapter.Element("verse")
.Select((element, index) => new {
VerseNumber = index + 1,
Text = element.Value
});
Run Code Online (Sandbox Code Playgroud)
对于每一节经文,我认为这段经文中的第一节和最后一节都不是很有意义.这不是那节经文的特色,不是吗?