【问题标题】:Parsing non-standard XML [closed]解析非标准 XML [关闭]
【发布时间】:2012-10-20 17:06:36
【问题描述】:

以下文本不是有效的 XML,因为它使用了非标准的标记名称和值...

<?xml version="1.0" encoding="utf-8"?>
<Command>
    <Priority value='1'/>
    <DeviceId value='1111'/>
    <TimeOut value='30000'/>
    <Command value='GetState'/>
    <Value value='12465767890'/>
    <Number value='1'/>
    <State value='None'/>
</Command>

如何在我的 Java 应用程序中解析这种非标准 XML?

【问题讨论】:

  • 你为什么用value='1'而不是value="1"??
  • 可以通过什么方式形成?
  • @basvas “不标准”是什么意思?
  • 首先,将 ' 更改为 " 第二个你的 xml 是有效的,第三个我不能说它最适合你,但我一直在使用 sax,它对我来说很好,即使是“非标准” xml

标签: java xml xml-parsing


【解决方案1】:

那么,您所说的“不合规”或“不标准”是什么意思...?

如果您的意思是它不符合要求,因为它使用单引号......

首先,我很确定使用单引号已经符合 XML 标准?但是,如果您想使用任何标准的 XML 解析库,您可以首先使输入更加兼容,例如将所有 ' 字符替换为 " 字符。

否则,可以尝试extending 标准 XML 解析库的某些组件,覆盖解析代码以搜索属性值对的单引号。

这些都不是很漂亮,但它们可以胜任。

如果你的意思是它不合规,因为属性值对实际上被称为属性名称的“值”......

没关系 - 你可以调用任何你想要的属性,只要它使用有效的字符。当然,它确实应该有一个有意义的名称,以便 XML 更易于理解,但称其为“值”也没有错。

标签名称也是如此——XML 没有标准的标签名称。 XML 旨在允许您使用任何您想要的标记名称和属性名称,因为它不使用任何无效字符。在你的情况下,它都是英文字符,所以它是有效的。

如果你说的是没有结束标签...

如果您不需要将任何内容存储在标签中,则以 ` 形式使用单标签是有效的 XML。如果您希望将内容存储在其中,则只需要打开和关闭标签。对于您的标签,它们只是具有属性-值对的单个标签,这是完全有效的。


最终,如果可能的话,最好的方法是从生成输入的任何地方纠正输入 - 如果它不编写符合 XML 的输出,它就不是一个很好的 XML 生成器。

【讨论】:

  • 问题不在引号内,而在标签内。我认为标签不标准
  • 我必须将属性命名为“优先级值”?
  • 标签名称为priorityvalue 属性的值为1。标签名称或属性名称中不能有空格。
  • 您不需要结束标签。 &lt;Priority value='1' /&gt;&lt;Priority value='1'&gt;&lt;/Priority&gt; 完全相同,都是有效的 XML。
  • 可以写代码 JDOM like Element rootElement = new Element("Command");文档 doc = new Document(rootElement); ?
【解决方案2】:

在 JDOM 中是:

 Element rootElement = new Element("EivCmd");
        Document doc = new Document(rootElement);
        Element Priority = new Element("Priority");
        rootElement.addContent(Priority);
        Priority.setAttribute(new Attribute("value", "1"));

【讨论】:

    猜你喜欢
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多