使用XmlReader只获取子级
本文关键字:获取 XmlReader 使用 | 更新日期: 2023-09-27 18:27:19
我有这个XML:
<root>
<row>
<data1>Data</data1>
<data2>Data</data2>
<data3>Data
<subdata>SubData</subdata>
</data3>
</row>
</root>
并且我想在不知道dataX
的确切名称的情况下使用XmlReader
来仅读取<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下载XPathReader
:https://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')]