【问题标题】:How to test for CDATA value of an element using Dom4j?如何使用 Dom4j 测试元素的 CDATA 值?
【发布时间】:2011-11-09 20:53:40
【问题描述】:

有人知道如何找出一个元素是否包含<![CDATA[ text ]]> 吗?我通过 dom4j API 和 Jaxen 进行搜索,但找不到如何做到这一点...如果我检索文本,则 cdata 包装器会被修剪。

【问题讨论】:

    标签: java cdata dom4j


    【解决方案1】:

    方法:

    Node.asXML()

    返回整个元素,其值未经任何修改。

    如果你有:

    <nodes>
      <node><![CDATA[value]]></node>
    </nodes>
    

    调用文本方法将返回“value”,但调用“asXML()”将返回:

    <node><![CDATA[value]]></node>
    

    从那里,我猜你可以对 CDATA 标记进行字符串搜索。

    【讨论】:

      【解决方案2】:

      从技术上讲,您仍然可以这样做。

      
      public boolean isCDATA(org.dom4j.Node node) {
        for (org.dom4j.Node n : node.content()) {
          if (org.w3c.dom.Node.CDATA_SECTION_NODE == n.getNodeType()) {
            return true;
          }
        }
        return false;
      }
      

      【讨论】:

      • 你是对的,但它必须是元素,因为方法在 AbstractBranch 类中。
      【解决方案3】:

      http://dom4j.sourceforge.net/dom4j-1.6.1/apidocs/org/dom4j/Node.html#getNodeType%28%29

      这行得通吗?

      public short getNodeType()
      

      根据节点类型返回代码。这使得多态处理节点变得更加容易,因为可以使用 switch 语句而不是多个 if (instanceof) 语句。

      返回:节点类型的 W3C DOM 兼容代码,例如 ELEMENT_NODE 或 ATTRIBUTE_NODE

      【讨论】:

      • 你问我 :-) ?它不会,它返回元素的类型......我关心它的值
      • 你可以使用它,但它必须与 content() 方法结合使用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多