关于 XPathNodeIterator 返回XML排序结果的问题
XPathDocument xpd=new XPathDocument(Server.MapPath( "user4.xml "));
XPathNavigator nav=xpd.CreateNavigator();
XPathExpression xpe = nav.Compile( "/Main/b/zzz ");
xpe.AddSort( "text() ", XmlSortOrder.Descending, XmlCaseOrder.UpperFirst, " ", XmlDataType.Text);
XPathNodeIterator xni = nav.Select(xpe);
// this.Literal1.Text = xni.Current.OuterXml + " <br> <br> ";
while (xni.MoveNext())
{
this.Literal1.Text += xni.Current.Value+ " <br> ";
}
如果用xni.Current.Value循环显示排序正常
但用xni.Current.OuterXml返回就是没排序的XML内容
请问为什么,如何解决. 我需要整个XML
------解决方案--------------------以下是在使用 Select 方法时需要考虑的重要事项。
您仍可以使用 XPathNavigator 对象的任一导航方法在 XPathNavigator 内移动。XPathNavigator 导航方法与 XPathNodeIterator 中的选定节点无关。
以后调用 Select 方法时,将返回一个新的 XPathNodeIterator 对象,该对象指向与新的 Select 调用匹配的选定节点集。两个 XPathNodeIterator 对象彼此之间完全无关。
------解决方案--------------------添加排序的顺序提供排序关键字的使用顺序。
如果 XPathExpression 或排序关键字需要命名空间解析,则必须使用 SetContext 方法为命名空间解析提供 XmlNamespaceManager。
在调用 SetContext 方法时,所有排序规则都被删除。若要保留排序规则,请在调用 AddSort 方法前调用 SetContext 方法。
如果 XPathExpression 不包含前缀,则认为命名空间 URI(统一资源标识符)为空命名空间。如果您的 XML 中包含默认命名空间,则仍须使用 SetContext 方法,并提供包含前缀和命名空间 URI 的 XmlNamespaceManager 以处理默认命名空间。