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>
感谢您对我的帮助
试试这个:
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选择分离出所有不同类型的项目,然后在迭代它们之前将它们单独排序,就好像它们是单个项目一样,对我来说很有效