0

私は現在、XMLStreamWriter の緩やかなポートを別の環境に書き込むことを検討しており、その名前空間ロジックを処理しようとしています。このクラスに関する Oracle のドキュメントでは、名前空間の修復が無効になっている状態で、のプレフィックスを使用して既にいくつかのプレフィックスにバインドされている名前空間 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"すでにバインドされている同じ名前空間 URI のプレフィックスを使用する両方の行で、"bob"例外がスローされることが予想されます。代わりに、コードは正常に完了しtst.xml

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

私は誤解していますか、それともこの動作は正しくありませんか?

4

1 に答える 1

0

別のプレフィックスを使用して、すでにいくつかのプレフィックスにバインドされている名前空間 URI を使用して要素/属性を書き込もうとすると、XMLStreamException が発生するはずです。

XML では、複数の異なるプレフィックスを同じ名前空間 URI にバインドできます。したがって、そのような状況で をスローするXMLStreamExceptionと、XML 仕様に違反します。

于 2015-11-08T17:15:02.837 に答える