【问题标题】:XML Parsing Error: not well-formed while parsing XML string with browser's built in parserXML 解析错误:使用浏览器的内置解析器解析 XML 字符串时格式不正确
【发布时间】:2012-06-09 02:05:03
【问题描述】:

我正在尝试使用浏览器的内置解析器使用 JavaScript 解析 XML 字符串。我的 XML 字符串如下所示:

<?xml version='1.0' encoding='UTF-8' ?>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
            xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
            xsi:schemaLocation='http://www.w3.org/2001/XMLSchema XMLSchema.xsd'
            elementFormDefault='qualified'
            version='1.0'>
<xsd:element name='probeMetadata' type='OASIS.System.Processor.LinuxProcessorProbe' />
<xsd:complexType name='OASIS.System.Processor.LinuxProcessorProbe'>
<xsd:complexContent>
<xsd:extension base='OASIS.System.Processor.ProcessorProbe'>
<xsd:sequence>
    <xsd:element name='nice_time' type='xsd:unsignedLong'  />
    <xsd:element name='iowait_time' type='xsd:unsignedLong'  />
    <xsd:element name='irq_time' type='xsd:unsignedLong'  />
    <xsd:element name='soft_irq_time' type='xsd:unsignedLong'  />
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name='OASIS.System.Processor.ProcessorProbe'>
<xsd:sequence>
    <xsd:element name='idle_time' type='xsd:unsignedLong'  />
    <xsd:element name='system_time' type='xsd:unsignedLong'  />
    <xsd:element name='user_time' type='xsd:unsignedLong'  />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

我编写了一个简单的 JavaScript 代码,只是为了检查解析器是否正确解析我的 XML 并将其转换为有效的 XML DOM。 JavaScript 代码如下所示:

parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");

x = xmlDoc.documentElement.childNodes;

document.getElementById("Text1").value = x[3].nodeName;

这里的“文本”在 XML 之上。这段代码没有任何意义。一开始我只是想测试一些简单的东西。我在 w3school.com 测试了 XML 的有效性,它没有给我错误,所以我想 XML 中没有错误。

【问题讨论】:

  • 你用的是什么浏览器?你是如何加载 XML 的?您收到的确切错误消息是什么?
  • 为什么不使用W3C validation service?使用编写标准的组织支持的服务是有意义的。
  • 我使用的是 Chrome 19。parseFromString 会为您加载 XML。我收到以下消息:“XML Parsing Error: not well-formed Location: localhost:49669/XSD_Parsing.aspx Line Number 1, Column 96:”
  • @RobG :我使用您在上次评论中提供的链接测试了我的 XML。 XML 通过了验证测试。
  • @DarshanPuranik 您能否将您正在使用的 XML 输入添加到您的问题中?

标签: javascript xml xml-parsing xsd


【解决方案1】:

以下内容对我有用。我正在使用 Chrome 20.0.1132.21 beta-m。

<html>
<head>
    <script>
        function test(){
            var text = "<?xml version='1.0' encoding='UTF-8' ?>\r\n"
            + "<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'\r\n"
            + "            xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\r\n"
            + "            xsi:schemaLocation='http://www.w3.org/2001/XMLSchema XMLSchema.xsd'\r\n"
            + "            elementFormDefault='qualified'\r\n"
            + "            version='1.0'>\r\n"
            + "<xsd:element name='probeMetadata' type='OASIS.System.Processor.LinuxProcessorProbe' />\r\n"
            + "<xsd:complexType name='OASIS.System.Processor.LinuxProcessorProbe'>\r\n"
            + "<xsd:complexContent>\r\n"
            + "<xsd:extension base='OASIS.System.Processor.ProcessorProbe'>\r\n"
            + "<xsd:sequence>\r\n"
            + "    <xsd:element name='nice_time' type='xsd:unsignedLong'  />\r\n"
            + "    <xsd:element name='iowait_time' type='xsd:unsignedLong'  />\r\n"
            + "    <xsd:element name='irq_time' type='xsd:unsignedLong'  />\r\n"
            + "    <xsd:element name='soft_irq_time' type='xsd:unsignedLong'  />\r\n"
            + "</xsd:sequence>\r\n"
            + "</xsd:extension>\r\n"
            + "</xsd:complexContent>\r\n"
            + "</xsd:complexType>\r\n"
            + "<xsd:complexType name='OASIS.System.Processor.ProcessorProbe'>\r\n"
            + "<xsd:sequence>\r\n"
            + "    <xsd:element name='idle_time' type='xsd:unsignedLong'  />\r\n"
            + "    <xsd:element name='system_time' type='xsd:unsignedLong'  />\r\n"
            + "    <xsd:element name='user_time' type='xsd:unsignedLong'  />\r\n"
            + "</xsd:sequence>\r\n" + "</xsd:complexType>\r\n"
            + "</xsd:schema>"
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(text, "text/xml");
            x = xmlDoc.documentElement.childNodes;
            document.getElementById("Text1").value = x[3].nodeName;         

        }
    </script>
</head>
<body>
    <input type="button" value="click" onClick="test()"/>
    <input type="text" name="Text1" id="Text1"/>
</body>
</html>

【讨论】:

  • 我没有正确格式化 XML。我忘记了整个 \r\n 事情。你能告诉我为什么 \r\n 如此重要吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多