使用System.Xml
使用排序参数运行selectNodes
(XPATH)时,XPath DOM编程中是否有任何方法?
例如,使用以下XML和程序以与文档相同的顺序写入值(降序)。有没有办法使用XPath以升序获取值?
请注意。当然,您可以在XSL中进行预排序,但是我需要更新值,因为我正在循环它们。由于XSL为我提供了排序的副本元素,不是实际的元素本身,我不能使用XSL。
这是一些XML,一个程序输出
public static void Main() {
XmlDocument xml = new XmlDocument();
xml.Load( "t.xml" );
// SelectNodes gets in document order, but I want in
// ascending order based on @value
foreach( XmlNode ndNode in xml.SelectNodes( "/xml/ele" ) ) {
Console.WriteLine( ndNode.Attributes["value"].Value );
}
}
这是XML
<xml>
<ele value='3' test='Third'/>
<ele value='2' test='Second'/>
<ele value='1' test='First'/>
</xml>
最后输出文件(降序)顺序。我想要一个按升序返回节点的XPath。
3
2
1
PS,我在Visual Studio 2008 .NET 3.5中使用System.Xml
答案 0 :(得分:5)
XPath不支持排序,但您可以查看AddSort
方法。
答案 1 :(得分:3)
不,单凭XPath无法进行排序。
但您可以轻松地使用LINQ按您想要的任何值对节点集合进行排序。
XmlDocument xml = new XmlDocument ();
xml.LoadXml("<xml> <ele value='3' test='Third'/> <ele value='2' test='Second'/> <ele value='1' test='First'/> </xml>");
var nodes = xml.SelectNodes( "/xml/ele" ).Cast<XmlNode>().OrderBy(ndNode => ndNode.Attributes["value"].Value);
答案 2 :(得分:1)
对于以后遇到这个问题的人,XPath 3.1具有排序功能。