2015-07-12 1 views
2

У меня возникла некоторая проблема при анализе моего xml с помощью парсера JDOM. Он дает мне прокомментированные строки, когда я пытаюсь получить контент. Там есть способ, чтобы мы могли игнорировать эти прокомментированные строки.Как игнорировать Комментируемый контент при разборе XML с использованием JDOM2

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. Другой контент, о котором нужно знать, - это инструкции по обработке, текст и ссылки на объекты.

Когда вы вызываете getContent на элементе rssChild, вы получаете содержимое комментария, и это значение является текстом внутри этого содержимого.

Кажется, вы просто хотите распечатать текстовое содержимое каждого дочернего элемента, а не всего содержимого.

Простым способом получения всех дочерних элементов является использование 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

 Смежные вопросы

  • Нет связанных вопросов^_^