如何解决从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 举报,一经查实,本站将立刻删除。