我有一个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;
}
我可以读取摘要元素,但问题在于<distance>
元素,它会读取它找到的第一个<distance>
节点。我想阅读不在<distance>
节点中的<step>
元素。
任何人都可以告诉我该怎么做
答案 0 :(得分:3)
来自MSDN,GetElementsByTagName
:
返回包含所有后代元素列表的XmlNodeList 与指定的名称匹配。
它是完整的子树搜索,而不是&#34;选择子节点&#34;功能。要选择单个子节点,请使用SelectSingleNode
。对于像你的&#34;步骤&#34;一些,使用SelectNodes
并正确迭代它们。
答案 1 :(得分:1)
您可以使用SelectSingleNode
或SelectNodes
来描述XPath中的元素,就像您在第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
方法。
如果您有任何疑问,请read more about XPath at MSDN。
顺便说一句,您可以将XmlElement
指定为枚举类型,而不是明确转换它:
xDoc.Load(url);
foreach (XmlElement element in xDoc.SelectNodes("/DirectionsResponse/route"))
{
kl = element.SelectSingleNode("summary").InnerText;
kl = element.SelectSingleNode("distance").InnerText;
}