使用 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 下载 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')]
我有这个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
您可以使用 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')]