2017-09-30 107 views
0

我沒有xml文檔的xsd文件,所以我必須更改爲默認xmlns「http://www.w3.org/2001/XMLSchema-instance」來分析XML元素,但是存在問題這樣做,當我更改根元素(myroot)的xmlns屬性時,在值爲「myxsd.xsd」的子元素(數據)中創建另一個屬性(xmlns)。 我想忽略或更改xmlns(myxsd.xsd)的值以正確解析文檔。JDOM2,xmlns(xsd)不能更改或從XML文檔中刪除

我的XML輸入:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<myroot xmlns="myxsd.xsd" class="15"> 
    <data att1="all" att2="actual"> 
     <myobject patt1="patt1_value" patt2="patt2_value" patt3="patt3_value"> 
      <p name="p1">page1</p> 
      <p name="p2">page1</p> 
      <p name="p3">page1</p> 
      <p name="p4">page4</p> 
     </myobject> 
    </data> 
</myroot> 

我的XML輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<myroot xmlns="http://www.w3.org/2001/XMLSchema-instance" class="15"> 
    <data xmlns="myxsd.xsd" att1="all" att2="actual"> 
    <myobject patt1="patt1_value" patt2="patt2_value" patt3="patt3_value"> 
     <p name="p1">page1</p> 
     <p name="p2">page1</p> 
     <p name="p3">page1</p> 
     <p name="p4">page4</p> 
    </myobject> 
    </data> 
</myroot> 

我的代碼:

public void Edit_file() throws JDOMException, IOException { 

    InputStream in = new FileInputStream("C:\\small_test.xml"); 

    SAXBuilder builder = new SAXBuilder(); 
    Document document = builder.build(in); 

    // getting the root element 
    Element root = document.getRootElement(); 
    Namespace tempNamespace = Namespace.getNamespace("http://www.w3.org/2001/XMLSchema-instance"); 
    root.setNamespace(tempNamespace); 


    // iterating over the children 
    List<Element> data = root.getChildren("data"); 

    for (Element element : data) { 

     Attribute id = element.getAttribute("att1"); 
     id.setValue("New value"); 
    } 
    XMLOutputter xmlOutput = new XMLOutputter(); 

    xmlOutput.setFormat(Format.getPrettyFormat()); 
    xmlOutput.output(document, System.out); 

} 

回答

1

我真的不明白,爲什麼你要的元素進入一個不同的名稱空間(特別是名稱空間http://www.w3.org/2001/XMLSchema-instance,不是爲此目的),b如果你想這樣做,你必須改變所有的元素,而不僅僅是最外層的元素。雖然名稱空間聲明只出現在最外層的元素上,但它具有將所有元素放在此名稱空間中的效果,並且除非您更改它們,否則它們將保留在該名稱空間中。

+0

我想從輸入的XML文件中刪除屬性xmlns,但我不知道它是如何做到的。 –

+1

然後,首先需要了解的是源XML中的xmlns屬性對分析的XML的JDOM表示中節點的名稱和其他屬性的影響。對不起,如果我沒有解釋這一點。我會再試一次:最外層元素上的xmlns屬性會更改樹中每個元素的名稱空間URI,爲了擺脫名稱空間,您需要更改每個元素的名稱。 –