我有以下 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 中,我必须读取 prices
的 then2price
、clearanceprice
、then1price
的值> 使用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
。
提前非常感谢。
最佳答案
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 派生”。请删除它们并调用上面的方法。
关于java - 读取xml java注释中的CDATA值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39604426/