使用 XmlReader 获取 children

Use XmlReader to just get children

我有这个XML:

<root>
  <row>
     <data1>Data</data1>
     <data2>Data</data2>
     <data3>Data
         <subdata>SubData</subdata>
     </data3>
  </row>
</root>

我想使用 XmlReader 只读取 <dataX> 元素,而不知道 dataX 的确切名称。我找到了ReadToNextSibling方法,但它需要一个名字,我不知道。

您可以使用以下 XPath 将元素过滤为仅 <dataN> 个元素:

/root/row/*[substring(name(), 0,5) = 'data']

/root/row/*[starts-with(name(),'data')]

但是,XmlReader 不能在其任何导航方法(例如 ReadToNextSibling

中对元素名称使用 xPath 或通配符

您可以使用 XPathReader,它可以从 XmlReader 对象实例化,如下所示:

XPathReader xpr  = new XPathReader("MyXml.xml", "/root/row/*[substring(name(), 0,5) = 'data']"); 

while (xpr.ReadUntilMatch()) {
   Console.WriteLine(xpr.ReadString()); 
} 

(您可以从 Microsoft 下载 XPathReaderhttps://www.microsoft.com/en-us/download/details.aspx?id=22677


如果您不喜欢 XPathReader 的想法,您可以使用 XmlDocument 执行以下操作:

XmlDocument xDoc = new XmlDocument();
xDoc.LoadXml(xml);
XmlNode root = xDoc.DocumentElement;

foreach (XmlNode item in root.SelectNodes(@"/root/row/*[substring(name(),0,5) = 'data']"))
{
    Console.WriteLine(item.Value);
}

编辑

更好的 XPath 实际上是:

/root/row/*[starts-with(name(),'data')]