gpt4 book ai didi

c# - 如何使用 fn :max in SelectSingleNode

转载 作者:太空狗 更新时间:2023-10-30 00:46:28 25 4
gpt4 key购买 nike

当我运行这个时:

XmlDocument xmlResponse = new XmlDocument();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlResponse.NameTable);
nsmgr.AddNamespace("fn", " http://www.w3.org/2005/xpath-functions");

xmlResponse.LoadXml(
"<LIST>" +
"<ITEM NUMBER='3' TEXT='C'/>" +
"<ITEM NUMBER='2' TEXT='B'/>" +
"<ITEM NUMBER='1' TEXT='A'/>" +
"</LIST>");

XmlNode xmlNode = xmlResponse.SelectSingleNode("//ITEM[fn:max(@NUMBER)]", nsmgr);

我得到一个异常“由于未知函数,此查询需要 XsltContext。”在最后一行。我正在尝试选择具有最高 NUMBER 属性的 ITEM 元素。这可能使用 XPATH 吗?

我使用的是 .Net 2.0,Linq 不是一个选项。

谢谢

最佳答案

XmlNode xmlNode = xmlResponse.SelectSingleNode("//ITEM[fn:max(@NUMBER)]", nsmgr);

max() 是一个 XPath 2.0 函数。 .NET 仅支持 XPath1.0。

在 XPath 1.0 中,您可以使用:

/*/ITEM[not(@NUMBER > ../@NUMBER)]

即使 .NET 已经实现了 XPath 2.0,问题中的 XPath 表达式也不会选择具有最大 NUMBER 属性的 ITEM。使用 max() 来选择它的正确 XPath 2.0 表达式是:

/*/ITEM[xs:integer(@NUMBER) eq max(../@NUMBER/xs:string(.))]

这是因为 max() 的参数必须是我们需要确定最大元素的项目序列。相反,在问题的 XPath 表达式中:

//ITEM[fn:max(@NUMBER)]

max 只有一个参数——上下文节点的 NUMBER 属性。因此以上等同于:

//ITEM[@NUMBER]

选择所有具有 NUMBER 属性的 ITEM 元素。

关于c# - 如何使用 fn :max in SelectSingleNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3228050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com