XMLStreamWriter缺少异常?

时间:2015-11-08 03:49:49

标签: java xml stax xmlstreamwriter

我目前正在考虑将一个松散的XMLStreamWriter端口写入另一个环境,并尝试获取其命名空间逻辑的句柄。此类的Oracle's documentation似乎指定禁用名称空间修复,尝试使用已绑定到某个前缀的名称空间URI编写元素/属性,使用不同的前缀,应该导致XMLStreamException 。但我没有看到这种行为。使用以下代码:

public void run() throws Exception {
    String BOB = "http://www.bob.com/"
    XMLOutputFactory fac = XMLOutputFactory.newInstance();
    fac.setProperty("javax.xml.stream.isRepairingNamespaces", false); // default
    XMLStreamWriter writer = fac.createXMLStreamWriter(new FileWriter("tst.xml"));

    writer.writeStartElement("bob", "root", BOB);
    writer.setPrefix("bob", BOB);
    writer.writeNamespace("bob", BOB);
    writer.writeAttribute("notbob", BOB, "attr", "value"); // Should fail?
    writer.writeStartElement("notbob", "firstinner", BOB); // Should fail?
    writer.writeEndElement();
    writer.writeEndElement();
    writer.writeEndDocument();

    writer.flush();
    writer.close();
}

我希望两条使用"notbob"前缀的行已经绑定到"bob"的同一名称空间URI抛出异常。相反,代码正常完成,tst.xml包含

<bob:root xmlns:bob="http://www.bob.com" notbob:attr="value">
    <notbob:firstinner></notbob:firstinner>
</bob:root>

我是误会,还是这种行为不正确?

1 个答案:

答案 0 :(得分:0)

  

使用不同前缀绑定到某个前缀的命名空间URI尝试编写元素/属性会导致XMLStreamException。

XML允许将多个不同的前缀绑定到同一个名称空间URI。因此,在这种情况下抛出XMLStreamException会违反XML规范。

相关问题