2016-09-20 4 views
0

У меня есть xml.Чтение значения CDATA в комментариях xml java

<add-item item-descriptor="sku" id="235957441"> 
    <set-property name="skuType"><![CDATA[NORMAL]]></set-property> 
    <set-property name="isPartOfClearancePriceList"><![CDATA[false]]></set-property> 
    <set-property name="size"><![CDATA[Single set]]></set-property> 
    <!-- rdonly <set-property name="prices"><![CDATA[then2price=-1.0,clearanceprice=-1.0,then1price=-1.0,extravaganzaprice=-1.0,wasprice=-1.0,nowprice=10.0]]></set-property> --> 
    <!-- rdonly derived <set-property name="dissectionName"><![CDATA[DUVETCOVERCOL2]]></set-property> --> 
    </add-item> 

В приведенном выше XML, Я читать значения then2price, clearanceprice, then1price из prices комментария с помощью кода Java.

Мне удалось прочитать комментарии, но не удалось прочитать комментарии CDATA.

Java код:

 NodeList nl = doc.getDocumentElement().getChildNodes(); 
     for (int i = 0; i < nl.getLength(); i++) { 
      if (nl.item(i).getNodeType() == Element.COMMENT_NODE) { 
       Comment comment = (Comment) nl.item(i); 
       // System.out.println(comment.getNodeValue()); 
       Node child = nl.item(i); 
       if(child instanceof CharacterData){ 
        CharacterData cd = (CharacterData) child; 
        System.out.println(cd.getNodeValue()); 
       } 
      } 

Приведенный выше код не печатает значения внутри CDATA, она печатает полный комментарий.

Мне просто нужно then2price=-1.0,clearanceprice=-1.0,then1price=-1.0,extravaganzaprice=-1.0,wasprice=-1.0,nowprice=10.0 на выходе.

Большое спасибо заранее.

ответ

1
String xmlStr = comment.getNodeValue(); 
DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
Document doc = db.parse(new InputSource(new StringReader(xmlStr))); 

if (doc.getFirstChild().getNodeType() == Node.ELEMENT_NODE) { 
    System.out.println(doc.getFirstChild().getTextContent()); 
} 

Он предоставит вам данные в формате CDATA, как ожидалось.

Примечание: И, конечно, для комментариев нужно иметь xml-формат. В настоящее время я вижу, что у вас есть «rdonly» и «rdonly». Удалите их и вызовите метод выше.