XML - 如何获取单个节点而不是整个文档中的子节点?

chi*_*063 5 c# xml xmldocument xmlnode

一直在寻找答案,但找不到任何东西 - 我很新,所以也许我没有找到正确的关键词?

这是我正在使用的 XML 示例

<database>
<book>
<title>A</title>
<author>
  <name>1</name>
</author>
</book>
<book>
<title>B</title>
<author>
  <name>2</name>
</author>
<author>
  <name>3</name>
</author>
<author>
  <name>4</name>
</author>
<author>
  <name>5</name>
</author>
</book>
</database>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 C# XMLDocument 获取书籍 A 作者 1,然后获取书籍 B 作者 1、2、3、4、5

到目前为止,我正在使用的代码正在循环遍历所有作者,因此我得到了书 A 作者 1, 2, 3, 4, 5

到目前为止我的代码大致如下

XmlDocument doc = new XmlDocument();
doc.Load("myxmlfile");
XmlNode root = doc.SelectSingleNode("database");
XmlNodeList nodelist = root.SelectNodes("book");

foreach (XmlNode n in nodelist)
        {

XmlNodeList authors = root.SelectNodes(".//author");
book.authorstring = "";
foreach (XmlNode author in authors)
       {
       book.authorstring = book.authorstring+author.SelectSingleNode("name").InnerText + ", ";
       }
}
Run Code Online (Sandbox Code Playgroud)

我读到一些地方,如果我在“//”之前使用“.”,它将“锚定”到当前节点,但它似乎不起作用并且正在循环遍历所有节点

我做错了什么或错过了什么?

Kri*_*tof 7

如果我理解正确的话,你的错误就在这一行:

XmlNodeList authors = root.SelectNodes(".//author");
Run Code Online (Sandbox Code Playgroud)

它应该是

XmlNodeList authors = n.SelectNodes(".//author");
Run Code Online (Sandbox Code Playgroud)