java - 读取xml java注释中的CDATA值

标签 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 中,我必须读取 pricesthen2priceclearancepricethen1price 的值> 使用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/

相关文章:

android - 如何在android中更改自定义形状的边界颜色?

json - Golang - 使用更改键值解码 JSON

.net - 调用 XmlReader::ReadStartElement 时抛出 InvalidOperationException

xml - 每个节点的最大不同子元素数

java - Jersey:将所有 POST 数据消耗到一个对象中

java - 使用自定义 IDResolver 的属性异常

java - 如何在 Java 和 C# 之间共享类定义

java - 如何组合多个Comparator?

java - 如何用可选的替换获取阶梯?

java - 如何在 JFrame 中设置文本而不执行操作