解析非标准XML

时间:2012-10-31 09:15:54

标签: java xml xml-parsing

以下文本不是有效的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?

2 个答案:

答案 0 :(得分:3)

那么,“不符合”或“不符合标准”是什么意思......?

如果你的意思是它不合规,因为它使用单引号......

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

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

这些都不是很漂亮,但他们会做的。

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

没关系 - 如果属性使用有效字符,您可以调用属性。当然,它应该有一个有意义的名称,以便XML更容易理解,但将其称为“值”并没有错。

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

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

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


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

答案 1 :(得分:0)

在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"));