2015-07-12 99 views
2

我在使用JDOM解析器解析我的xml時遇到了一些問題。當我嘗試檢索內容時,它給了我註釋的行。是否有一種方法可以讓我們忽略這些評論線。如何在使用JDOM2解析XML時忽略註釋內容

Java代碼:

SAXBuilder jdomBuilder = new SAXBuilder(); 
    // jdomDocument is the JDOM2 Object 
    Document jdomDocument = jdomBuilder.build("C:/manu/WebservicesWS/DynamicXmlParse/src/PO_XML.xml"); 
    // The root element is the root of the document. we print its name 
    System.out.println(jdomDocument.getRootElement().getName()); // prints 
                    // "rss" 
    Element rss = jdomDocument.getRootElement(); 
    System.out.println(rss.getNamespaceURI()); 
    List<Element> rssChildren = rss.getChildren(); 
    // getElement(rssChildren); 
    for (int i = 0; i < rssChildren.size(); i++) { 
     Element rssChild = rssChildren.get(i); 
     System.out.println(rssChild.getName());// prints 'title' and 'link' 
     List<Content> rssContents = rssChild.getContent(); 
     for (int j = 0; j < rssContents.size(); j++) { 
      Content content = rssContents.get(j); 
      System.out.println(content.getValue()); 
     } 
    } 

XML結構

<interchange-control-header> 
    <control-number>2</control-number> 
    <sender-id>ZZ:IQAAOBUYER7</sender-id> 
    <receiver-id>ZZ:33347456972</receiver-id> 
    <!--sender-id>ZZ:IQAAOBUYER2</sender-id> 
    <receiver-id>ZZ:IQAAOSUPPLIER2</receiver-id>   
    <sender-id>IQAOrionBuyer</sender-id> 
    <receiver-id>IQAOrionSupplier</receiver-id-->   
    <date-time>2012-06-29T09:30:47-05:00</date-time> 
    <control-version>1</control-version> 
    <usage-indicator>T</usage-indicator> 
    <is-copy>0</is-copy> 
</interchange-control-header> 

電流輸出

interchange-control-header 
2 
ZZ:IQAAOBUYER7 
ZZ:33347456972 
sender-id>ZZ:IQAAOBUYER2</sender-id> 
    <receiver-id>ZZ:IQAAOSUPPLIER2</receiver-id>   
    <sender-id>IQAOrionBuyer</sender-id> 
    <receiver-id>IQAOrionSupplier</receiver-id 
2012-06-29T09:30:47-05:00 
1 
T 
0 

所需的輸出:

interchange-control-header 
2 
ZZ:IQAAOBUYER7 
ZZ:33347456972 
2012-06-29T09:30:47-05:00 
1 
T 
0 
+0

而不是調用'getContent'讓所有子節點的,調用'getContent'與http://www.jdom.org/docs/apidocs /org/jdom2/filter/ElementFilter.html'ElementFilter '只處理子元素,這樣就忽略了註釋節點。 –

回答

1

評論被認爲是XML文檔的一個可識別部分,以及像Elements這樣的更明顯的東西。其他要注意的內容是Processing Instructions,Text和Entity References。

當您在rssChild元素上調用getContent時,將獲得Comment內容,它的值是該內容中的文本。

看來你只是想打印出每個子元素的文本內容,而不是所有的內容。

獲取所有子元素的簡單方法是使用the getChildren() method(而不是getContent)。你已經在其他地方使用getChildren了,所以我不確定你爲什麼忘了在這裏使用它。

此外,你可以簡化循環爲每個樣式...此代碼:

List<Element> rssChildren = rss.getChildren(); 
// getElement(rssChildren); 
for (int i = 0; i < rssChildren.size(); i++) { 
    Element rssChild = rssChildren.get(i); 
    System.out.println(rssChild.getName());// prints 'title' and 'link' 
    List<Content> rssContents = rssChild.getContent(); 
    for (int j = 0; j < rssContents.size(); j++) { 
     Content content = rssContents.get(j); 
     System.out.println(content.getValue()); 
    } 
} 

可能是:

for (Element rssChild : rss.getChildren()) { 
    System.out.println(rssChild.getName());// prints 'title' and 'link' 
    for (Element subRss : rssChild.getChildren()) { 
     System.out.println(subRss.getValue()); 
    } 
} 
+0

@rilfl謝謝..它爲我工作! – Manu

相關問題