2014-10-01 54 views
4

我試圖構建以下XML結構:JDOM2 - 兩個命名

<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,結果也不一樣,因爲我希望它是。 如果我設置了命名空間的root.setNamespace(),並使用第二一個前綴爲我它看起來像這樣:

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

於是就有了EDIPOrderPackage前的我。

如果我不使用前綴是看起來像這樣:

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

如果,如果嘗試將其添加爲屬性,它拋出的錯誤信息,我無法用名稱「的xmlns」

屬性

那麼,如何用JDOM構建一個如上所示的XML?

回答

4

訣竅是,對於名稱空間,您必須爲所添加的所有元素正確指定它。

此外,默認命名空間是一個聲明爲xmlns="...."而不是xmlns:abc="...."

當你使用一個默認的命名空間,它有沒有爲元素「前綴」。所以從您的示例代碼,您有:

  • 默認命名空間:xmlns="urn:URI"
  • '我' 的命名空間:

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

    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"

可以與JDOM創建這些現在,當您創建元素時,必須將它們放在正確的命名空間中:

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> 
+0

新增工作示例。 – rolfl 2014-10-01 23:25:41