日期:2014-05-20  浏览次数:20434 次

关于 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 以处理默认命名空间。