我有这个XML:
<root>
<row>
<data1>Data</data1>
<data2>Data</data2>
<data3>Data
<subdata>SubData</subdata>
</data3>
</row>
</root>
我希望使用XmlReader
只读取<dataX>
元素,而不知道dataX
的确切名称。我找到了ReadToNextSibling
方法,但它需要一个名字,我不知道。
答案 0 :(得分:2)
您可以使用以下XPath将元素过滤为<dataN>
元素:
/ root / row / * [substring(name(),0,5)='data']
/root/row/*[starts-with(name(),'data')]
但是,XmlReader
不能在任何导航方法(例如ReadToNextSibling
您可以使用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')]