C# Xml 操作 - 读写,查找,排序

        static void Main(string[] args)
        {
            string Xml = "<xml><message>ok</message><nu>8865014*****</nu><ischeck>1</ischeck><com>tiantian</com><condition>F00</condition><status>1</status><state>3</state><data><time>2013-11-18 13:09:23</time><context>已签收,签收人是【本人】</context></data><data><time>2013-11-17 20:06:16</time><context>【北京昌平回龙观】正在进行【货件留仓】扫描</context></data><data><time>2013-11-17 04:36:00</time><context>快件已到达【北京昌平回龙观】扫描员是【01046】上一站是【北京集散】</context></data><data><time>2013-11-17 03:32:39</time><context>由【北京集散】发往【北京昌平回龙观】</context></data><data><time>2013-11-16 15:58:26</time><context>快件已到达【北京集散】扫描员是【广州物流车】上一站是【广州】</context></data><data><time>2013-11-13 04:08:28</time><context>由【广州】发往【北京集散】</context></data><data><time>2013-11-13 02:43:23</time><context>由【广州】发往【北京集散】</context></data><data><time>2013-11-13 02:43:22</time><context>【广州】正在进行【装袋】扫描</context></data><data><time>2013-11-13 00:54:56</time><context>快件已到达【广州】扫描员是【许文改】上一站是【广州芳村西�】</context></data><data><time>2013-11-12 23:00:42</time><context>由【广州芳村西�】发往【广州】</context></data><data><time>2013-11-12 23:00:41</time><context>【广州芳村西�】正在进行【装袋】扫描</context></data></xml>";

            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(Xml);

            XPathNavigator pathNav = xmlDoc.CreateNavigator();
            XPathExpression pathExp = pathNav.Compile("/xml/data");
            //排序
            pathExp.AddSort("time", XmlSortOrder.Ascending, XmlCaseOrder.None, null, XmlDataType.Text);
            XPathNodeIterator pathNode = pathNav.Select(pathExp);

            /*在添加排序的结果之前我们首先需要移除data的数据,这是我们不需要的
              得到跟,因为xml格式的问题,这个里面有N个data节点,如果需要完全删除data则需要RemoveChild
              因为removeall() 只会移除data内的所有元素 节点,最后保留下<data></data>并不能删除整个data*/

            //获取data节点的list
            XmlNodeList xmlNodeList = xmlDoc.SelectNodes("/xml/data");
            for (int i = 0; i < xmlNodeList.Count; i++)
                xmlDoc.SelectSingleNode("/xml").RemoveChild(xmlNodeList.Item(i));

            //XmlNode xmlNode = xmlDoc.SelectSingleNode("/xml/data[time=\"2013-11-17 04:36:00\"]"); //查找还能这样

            while (pathNode.MoveNext())
                xmlDoc.SelectSingleNode("/xml").InnerXml += pathNode.Current.OuterXml; //在xml节点内循环添加排序后的结果

            Console.WriteLine(xmlDoc.OuterXml);
            Console.Read();
        }

using system.xml;

using system.xml.xpath;

posted @ 2013-11-18 16:07  颂云  阅读(774)  评论(0编辑  收藏  举报