在xml java的注释中读取CDATA值

时间:2016-09-20 22:03:10

标签: java xml unmarshalling cdata

我是以下xml。

<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中,我使用java代码阅读then2price clearanceprice评论的then1pricepricesCDATA值。

我设法阅读了评论但无法阅读评论的 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()); } }

Java代码:

then2price=-1.0,clearanceprice=-1.0,then1price=-1.0,extravaganzaprice=-1.0,wasprice=-1.0,nowprice=10.0

以上代码不打印CDATA内的值,它是打印完整的注释。

我只需要输出{{1}}。

非常感谢提前。

1 个答案:

答案 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派生。请删除它们并致电上述方法。