XPathDocument, 使用XPathExpression 排序

在XML节点中加入了命名空间后,如果要用XPathDocument 查找节点,并排序,需要使用两个XPathExpression.否则排序会失败。

具体原因见微软bug: http://support.microsoft.com/kb/316656/zh-tw

 

<?xml version="1.0" encoding="gb2312"?>

<root xmlns="http://tempurl/data.xsd">

      <student>

            <name>John</name>

            <age>22</age>

      </student>

      <student>

            <name>Ang</name>

            <age>21</age>

      </student>

      <student>

            <name>Lee</name>

            <age>23</age>

      </student>

      <student>

            <name>Xu</name>

            <age>25</age>

      </student>

</root>

 

class Core

    {

        public static List<string> GetData()

        {

            XPathDocument document = new XPathDocument(@"D:/test.xml");

            XPathNavigator nav = document.CreateNavigator();

            List<string> list = new List<string>();

 

            XmlNamespaceManager namespaceMgr = new XmlNamespaceManager(nav.NameTable);

            namespaceMgr.AddNamespace("b", "http://tempurl/data.xsd");

 

            string xpath = "//b:student[b:age>20]";

            XPathExpression exp = nav.Compile(xpath);

 

            exp.SetContext(namespaceMgr);

            //exp.AddSort("b:age", XmlSortOrder.Descending, XmlCaseOrder.None, null, XmlDataType.Number);

 

            XPathExpression exp2 = nav.Compile("b:age");

            exp2.SetContext(namespaceMgr);

 

            exp.AddSort(exp2, XmlSortOrder.Descending, XmlCaseOrder.None, null, XmlDataType.Number);

 

            XPathNodeIterator iter = nav.Select(exp);

 

            while (iter.MoveNext())

            {

                list.Add(iter.Current.InnerXml);

            }

            return list;

        }

    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值