查询存储在c#字符串中的XML
本文关键字:XML 字符串 存储 查询 | 更新日期: 2023-09-27 18:07:23
我必须从XML中读取一些值,下面是我的示例XML
<?xml version="1.0" encoding="utf-16"?>
<ParentNode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ChildNode>
<GrandChild Name="title" Value="Mr" />
<GrandChild Name="Name" Value="Test" />
<GrandChild Name="Age" Value="25" />
<GrandChild Name="Gender" Value="Male" />
</ChildNode>
</ParentNode>
我必须读取Name和Age节点的值,这就是我如何做的
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(myXMLstring);
var nodes = xmlDoc.SelectNodes("/ParentNode/ChildNode");
foreach (XmlNode childrenNode in nodes)
{
}
但是这段代码只运行了一次,我尝试了这个内部循环,但它没有运行
var gchild= childrenNode.SelectNodes("/GrandChild");
foreach (XmlNode namevalue in gchild)
{
}
如何获取Name
和Age
节点的值?
您的XML只包含一个ChildNode
,因此XPATH表达式/ParentNode/ChildNode
将只返回一个结果。如果你想迭代孙子,你应该使用/ParentNode/ChildNode/GrandChild
或//GrandChild
,例如:
var nodes = xmlDoc.SelectNodes("/ParentNode/ChildNode/GrandChild");
结果是一样的。
XPath表达式开头的一个斜杠表示路径从根开始,因此/GrandChild
不返回任何内容,因为在根级别没有GrandChild
注释。双斜杠//
表示在层次结构中的任何位置,因此//GrandChild
将返回文件
GrandChild
节点 SelectNodes
使用XPath表达式。在XPath中,如果表达式以/
为星号,它将开始相对于根进行选择。
只使用相对xpath表达式。在你的例子中:
var gchild = childrenNode.SelectNodes("./GrandChild");
或等价的:
var gchild = childrenNode.SelectNodes("GrandChild");
或者,如果您的只是的目的是遍历那些GrandChild
元素,那么没有理由首先选择ChildNode
,您可以直接迭代:
var nodes = xmlDoc.SelectNodes("/ParentNode/ChildNode/GrandChild");