Xpath表达式Addsort方法

本文关键字:方法 Addsort 表达式 Xpath | 更新日期: 2023-09-27 18:03:42

我试图对文档系统的XML文件进行添加排序,包括日期修改项。

基本上我有一个gridview来显示所有文档列表的XML,并且我在显示之前对数据运行addsort。

每个文件都有一个标记,带有true或false,然后是发布日期(这些是完整的文档,因此不需要修改),当文档被修改时,标记被更改为true,一旦完成,它将在标记上给出发布日期。

客户需要的正确订单是那些修改过的->日期修改过的->那些修改过的标签错误的。

目前我有标题排序:

        StringReader str = new StringReader(PLCDocsXML.InnerXml);
        XPathDocument doc = new XPathDocument(str);
        XPathNavigator navigator2 = PLCDocsXML.CreateNavigator();
        XPathExpression subselectExpression = navigator2.Compile(XpathExpr);
        if (asc)
        {
            subselectExpression.AddSort("title", XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);
        }

XML是这样的:

    <result>
       <document>
          <title>Title</title>
          <otherstuff />
          <modified>[true/false]<modified> #those with true first before false
          <publishdate /> #if not got a publish date
          <publishdate>2009-10-16</publishDate>
       </document>
    </result>

所以我需要的顺序是:

     <result>
       <document>
          <title>Title1</title>
          <otherstuff />
          <modified>true<modified>
          <publishdate />
       </document>
       <document>
          <title>Title4</title>
          <otherstuff />
          <modified>true<modified>
          <publishdate>2010-11-27</publishDate>
       </document>
       <document>
          <title>Title2</title>
          <otherstuff />
          <modified>true<modified>
          <publishdate>2009-10-16</publishDate>
       </document>
       <document>
          <title>Title3</title>
          <otherstuff />
          <modified>false<modified>
          <publishdate />
       </document>
    </result>

感谢您对我的帮助

Xpath表达式Addsort方法

试试这个:

var navigator = doc.CreateNavigator();
var subselectTrueExpression = navigator
    .Compile(@"//document[normalize-space(modified) = 'true']");
var subselectFalseExpression = navigator
    .Compile(@"//document[normalize-space(modified) = 'false']");
var nodes = navigator.Select(subselectTrueExpression).Cast<XPathNavigator>()
    .Concat(
        navigator.Select(subselectFalseExpression).Cast<XPathNavigator>()
    );

我最终自己修复了这个问题(我无法让kirills编译,它抱怨没有concat方法)

方法是使用xpath选择分离出所有不同类型的项目,然后在迭代它们之前将它们单独排序,就好像它们是单个项目一样,对我来说很有效