2015-07-12 53 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

相关问题