4

次の XML 構造を構築しようとしています。

<EDIOrderPackage xmlns="urn:URI" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Version>1.0.0.0</Version>
    <Test>true</Test>
</EDIOrderPackage>

JDOM2 を使用していますが、2 つの名前空間を追加する方法がわかりません。Namespace を 1 つだけ設定しても、結果は希望どおりにはなりません。名前空間を by に設定root.setNamespace()し、接頭辞 i を付けて 2 番目の名前空間を使用すると、次のようになります。

<i:EDIOrderPackage mlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Version>1.0.0.0</Version>
    <Test>true</Test>
<i:/EDIOrderPackage>

したがって、EDIPOrderPackage の前に i があります。

プレフィックスを使用しない場合は、次のようになります。

<EDIOrderPackage xmlns="urn:URI">
    <Version xmlns="">1.0.0.0</Version>
    <Test xmlns="">true</Test>
</EDIOrderPackage>

属性として追加しようとすると、「xmlns」という名前の属性を作成できないというエラー メッセージがスローされます。

では、上記のような JDOM を使用して XML を構築するにはどうすればよいでしょうか。

4

1 に答える 1

4

秘訣は、名前空間では、追加するすべての要素に対して正しく指定する必要があるということです。

さらに、デフォルトの名前空間は、として宣言され、宣言されxmlns="...."ていないものです。xmlns:abc="...."

デフォルトの名前空間を使用すると、要素に「接頭辞」がありません。したがって、サンプルコードから次のようになります。

  • デフォルトの名前空間:xmlns="urn:URI"
  • 'i' 名前空間: xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

これらは、JDOM を使用して次のように作成できます。

Namespace nsDefault = Namespace.getNamespace("urn:URI");
Namespace nsI = Namespace.getNamespace("i", "http://www.w3.org/2001/XMLSchema-instance");

要素を作成するときは、正しい名前空間に配置する必要があります。

Element root = new Element("EDIOrderPackage", nsDefault);
Element version = new Element("Version", nsDefault);
Element test = new Element("Test", nsDefault);

root.addNamespaceDeclaration(nsI); // add the i namespace declaration.
root.addContent(version);
root.addContent(test);

XMLOutputter の側面を追加すると、次のようになります。

Document doc = new Document(root);
XMLOutputter xout = new XMLOutputter(Format.getPrettyFormat());
xout.output(doc, System.out);

上記のコードは出力を生成します

<?xml version="1.0" encoding="UTF-8"?>
<EDIOrderPackage xmlns="urn:URI" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Version />
  <Test />
</EDIOrderPackage>
于 2014-10-01T13:23:19.100 に答える