我试图为文档系统的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>
感谢您提供任何帮助
答案 0 :(得分:0)
试试这个:
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>()
);
答案 1 :(得分:0)
我最终自己解决这个问题(我无法编译kirills,它抱怨没有连接方法)
方法是使用xpath选择来分离所有不同类型的项目,然后在迭代它们之前对它们进行各种排序,就像它们是单个项目一样,为我工作