none
请教,这样的XML如何解析? RRS feed

  • 问题

  • <!-- Copyright (c) 2010, XC Games. -->
    <?xml version="1.0" encoding="utf-8" ?>
    <data>
      <item name="15102" value="&lt;50" />
      <item name="2701" value="http://www.baidu.com?id=1001&xs=0" />
    </data>

    这种XML存在以下问题:

    1、首行注释。

    2、实体不规范,既出现 "&lt;",又单独出现"&"号

    2012年5月30日 13:21

答案

  • 谢谢,问题我已经解决了,我已经把字符流重写了。这种XML是不合法,但是别人就是用的这种我也没有办法,我需要解析。如果按照你说的那样写如果XML中单独出现一个"&"而不是"&amp;"是会报错的。
    2012年6月1日 13:20

全部回复

  •     Sub Main()
            '假设已经存在文档test.xml
            Dim xmlstr = My.Computer.FileSystem.ReadAllText("test.xml")
            '干掉首行的注释
            Dim xs = xmlstr.Split(vbLf).Skip(1)
            Console.WriteLine(String.Join(vbLf, xs))
            '处理特殊字符的转义
            Dim s = New MemoryStream(UTF8Encoding.Default.GetBytes(String.Join(vbCr, xs).Replace("&", "&amp;")))
            '解析xml文档
            Dim xml = XDocument.Load(s)
            For Each xd In xml.<data>.<item>
                Console.WriteLine(String.Format("item name:{0} ; value:{1}", xd.@name, xd.@value))
            Next
            Console.Read()
        End Sub


    算神的博客

    2012年5月31日 0:06
  • 总感觉这种方式不太好,首行注释不一定有,这只是其中的一个XML。有的XML文件有1M多,如果使用这种方式批量读写是不是会太慢了

    2012年5月31日 4:51
  • <!-- Copyright (c) 2010, XC Games. -->
    <?xml version="1.0" encoding="utf-8" ?>
    <data>
      <item name="15102" value="&lt;50" />
      <item name="2701" value="http://www.baidu.com?id=1001&xs=0" />
    </data>

    这种XML存在以下问题:

    1、首行注释。

    2、实体不规范,既出现 "&lt;",又单独出现"&"号

    首先说明,首行应该是xml定义,第二行开始才允许出现正文或者注释。而且我把你的xml拷贝到VS的xml编辑器中就出现了语法错误提示,显然这样的xml是不合法的。

    其次,如果把你的xml更正如下形式:

    <?xml version="1.0" encoding="utf-8" ?>
    <!-- Copyright (c) 2010, XC Games. -->
    <data>
      <item name="15102" value="&lt;50" />
      <item name="2701" value="http://www.baidu.com?id=1001" />
    </data>

    【代码如下】

     XmlDocument doc = new XmlDocument();
                doc.Load("XMLFile1.xml");
                var result = doc.SelectNodes("//item");
                foreach (XmlNode item in result)
                {
                    Console.WriteLine("Name:"+item.Attributes["name"].InnerText+"Value:"+item.Attributes["value"].InnerText);
                }
    2012年6月1日 2:15
  • 谢谢,问题我已经解决了,我已经把字符流重写了。这种XML是不合法,但是别人就是用的这种我也没有办法,我需要解析。如果按照你说的那样写如果XML中单独出现一个"&"而不是"&amp;"是会报错的。
    2012年6月1日 13:20
  • 是的,不能出现特殊字符&,否则无法解析的。

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月2日 3:23
  • 谢谢,问题我已经解决了,我已经把字符流重写了。这种XML是不合法,但是别人就是用的这种我也没有办法,我需要解析。如果按照你说的那样写如果XML中单独出现一个"&"而不是"&amp;"是会报错的。
    如果能够分享一下源代码更好不过了!:-)
    2012年6月5日 1:30