微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从XML文件的最后一个子项中选择值

如何解决从XML文件的最后一个子项中选择值

|| 我正在为query_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.SelectSingleNode(\"//queries/query/description/text()\");
string TID = id.InnerText; 
    

解决方法

        形式的任何答案:
//queries/query[position() = last()]/query_id/text()
要么
//queries/query/description[last()]/text()
是错的。 这是一个常见问题解答:XPath
//
伪运算符的优先级比
[]
运算符的低-这就是为什么上面的表达式选择任何
query
(或分别为
description
)元素作为其父级的最后一个子元素的原因-这些可以全部为
query
description
元素。 解: 采用:
(//queries/query)[last()]/query_id/text()
另请注意:使用
//
伪运算符通常会导致效率显着下降,因为这会导致遍历以当前节点为根的整个(子)树(O(N ^ 2)操作)。 黄金法则:只要XML文档的结构是静态的(预先)已知且稳定的,就不要使用
//
。而是使用具有一系列特定位置步骤的XPath表达式。 例如,如果可以使用以下方式选择要选择的所有元素:
 /x/y/queries/query
然后使用上面的XPath表达式-不是
//queries/query
    ,        使用这个XPath
 //queries/query/description[last()]/text()
    ,        要检索上一个查询的
query_id
,请将您的XPath更改为
/queries/query[position() = last()]/query_id/text()
或者,使用LINQ to 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;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。