C# 从XML文件的最后一个子项中选择值
我正在分析查询\u id的URI。我想获取最后一个查询的id。这实际上是URI中最后添加的节点 我正在使用下面的代码,但它无法返回最后一个节点,而是从第一个节点返回信息。救命啊C# 从XML文件的最后一个子项中选择值,c#,xml,xpath,C#,Xml,Xpath,我正在分析查询\u id的URI。我想获取最后一个查询的id。这实际上是URI中最后添加的节点 我正在使用下面的代码,但它无法返回最后一个节点,而是从第一个节点返回信息。救命啊 XmlDocument doc = new XmlDocument(); doc.Load("helpdesk.hujelabs.com/user.php/1/query"); XmlNode node = doc.DocumentElement; XmlNode id = node.LastChild.SelectSi
XmlDocument doc = new XmlDocument();
doc.Load("helpdesk.hujelabs.com/user.php/1/query");
XmlNode node = doc.DocumentElement;
XmlNode id = node.LastChild.SelectSingleNode("//queries/query/description/text()");
string TID = id.InnerText;
使用这个XPath
//queries/query/description[last()]/text()
要检索上一个查询的
查询id
,请将XPath更改为
/querys/query[position()=last()]/query\u id/text()
或者,使用LINQ到XML:
var doc = XDocument.Load("http://helpdesk.hujelabs.com/user.php/1/query");
var elem = doc.Root.Elements("query").Last().Element("query_id");
var TID = (int)elem;
任何形式的回答:
//queries/query[position() = last()]/query_id/text()
(//queries/query)[last()]/query_id/text()
或
//queries/query/description[last()]/text()
是错误的
这是一个常见问题解答:XPath/
伪运算符的优先级低于[]
运算符——这就是上面的表达式选择任何查询
(或分别选择说明
)的原因作为其父元素的最后一个子元素的元素—这些可以是所有query
或description
元素
解决方案:
//queries/query[position() = last()]/query_id/text()
(//queries/query)[last()]/query_id/text()
使用:
//queries/query[position() = last()]/query_id/text()
(//queries/query)[last()]/query_id/text()
另请注意:使用/
伪运算符通常会导致显著的效率损失,因为这会导致根在当前节点上的整个(子)树被完全遍历(O(N^2)操作)
黄金法则:只要XML文档的结构是静态(预先)已知且稳定的,就不要使用/
。而是使用具有一系列特定位置步骤的XPath表达式
例如,如果要选择的所有图元都可以使用以下选项进行选择:
/x/y/queries/query
然后使用上面的XPath表达式--not
//querys/query
我不知道如何将代码放在这里,但这就是我正在使用的。。。XmlDocument doc=新的XmlDocument();doc.Load(“);XmlNode node=doc.DocumentElement;XmlNode id=node.LastChild.SelectSingleNode(//querys/query/description/text()”);string TID=id.InnerText;请参阅。好问题,+1。请参阅我的答案,以了解目前唯一正确的解决方案,解释此常见问题并提供完整、简单且容易的解决方案solution@svick:您不知道XML文档的结构,它的顶部元素可能没有命名为querys
@Dimitre,确切地说,我知道,URL In这个问题行得通。@svick:我不知道问题中有任何URL。谢谢大家,它行得通!!