gpt4 book ai didi

c# - XPathExpression AddSort 失败

转载 作者:太空宇宙 更新时间:2023-11-03 22:07:33 28 4
gpt4 key购买 nike

我正在尝试对 xpath 查询的结果进行排序,但它失败了。

输出:

ABC
DEF

但我期待:

DEF
ABC

源代码如下所示,它使用 XML 表达式并对结果进行排序:

var doc = new XPathDocument("testmsg2.xml");
var nav = doc.CreateNavigator();

const string query = "//Z/X/Code";

var expr = nav.Compile(query);
expr.AddSort("Code",
XmlSortOrder.Descending,
XmlCaseOrder.None,
"",
XmlDataType.Text);

switch (expr.ReturnType)
{
case XPathResultType.NodeSet:
var nodes = (XPathNodeIterator)nav.Evaluate(expr);

while (nodes != null && nodes.MoveNext())
{
if (nodes.Current == null)
continue;

if (nodes.Current.HasChildren)
{
var childIter = nodes.Current.SelectChildren(XPathNodeType.All);

while (childIter.MoveNext())
{
if (childIter.Current != null)
Console.WriteLine(childIter.Current.Value);
}
}
else
{
Console.WriteLine(nodes.Current.Value);
}
}

break;
}

此示例简化了 XML 文件:

<?xml version="1.0" encoding="utf-8"?>
<Z>
<X>
<Code>ABC</Code>
</X>
<X>
<Code>DEF</Code>
</X>
</Z>

最佳答案

AddSort方法采用上下文绑定(bind)到 XPathExpression 的 XPath 表达式你已经编译了。在你的例子中,XPathExpression是针对 <Code> 编译的元素。做AddSort("Code")暗示您具有以下 XML:

<Code>
<Code>
</Code>
</Code>

相反,您可以将表达式编译为 X :

const string query = "//Z/X";

或者您可以在当前节点(即 Code )、. 上排序:

expr.AddSort(".", XmlSortOrder.Descending, XmlCaseOrder.None, "", XmlDataType.Text);

关于c# - XPathExpression AddSort 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7848192/

28 4 0