[英]Read XML Node at different level with same name
我有一个xml,在不同级别上具有相同的元素名称,我尝试使用此代码来读取它,
xDoc.Load(url);
XmlNodeList nodeList = xDoc.SelectNodes(string.Format("/DirectionsResponse/route"));
foreach (XmlNode node in nodeList)
{
XmlElement companyElement = (XmlElement)node;
kl = companyElement.GetElementsByTagName("summary")[0].InnerText;
kl = companyElement.GetElementsByTagName("distance")[0].InnerText;
}
我可以读取summary元素,但是问题出在<distance>
元素上,它读取了找到的第一个<distance>
节点。 我想读取不在<step>
节点中的<distance>
元素。
谁能告诉我该怎么做
从MSDN,在GetElementsByTagName
:
返回一个XmlNodeList,其中包含与指定的Name匹配的所有后代元素的列表。
这是一个完整的子树搜索 ,而不是“选择子节点”功能。 要选择单个子节点,请使用SelectSingleNode
。 对于像“步骤”这样的组,请使用SelectNodes
并对其进行正确的迭代。
您可以使用SelectSingleNode
或SelectNodes
来描述XPath中的元素,就像您在XmlNodeList nodeList = xDoc.SelectNodes("/DirectionsResponse/route");
行上做到的一样: XmlNodeList nodeList = xDoc.SelectNodes("/DirectionsResponse/route");
。
xDoc.Load(url);
XmlNodeList nodeList = xDoc.SelectNodes(string.Format("/DirectionsResponse/route"));
foreach (XmlNode node in nodeList)
{
XmlElement companyElement = (XmlElement)node;
kl = companyElement.SelectSingleNode("summary").InnerText; // summary node within current context
kl = companyElement.SelectSingleNode("distance").InnerText;
}
应该可以。
我认为,最好在各处使用通用的XPath SelectSingleNode
和SelectNodes
方法。
如果您有任何疑问, 请在MSDN上阅读有关XPath的更多信息 。
顺便说一句 ,您可以将XmlElement
指定为枚举类型,而不必显式转换它:
xDoc.Load(url);
foreach (XmlElement element in xDoc.SelectNodes("/DirectionsResponse/route"))
{
kl = element.SelectSingleNode("summary").InnerText;
kl = element.SelectSingleNode("distance").InnerText;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.