我正在尝试对 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);
我是一名优秀的程序员,十分优秀!