0

getText() を使用して JDOM2 で CDATA 値を取得しようとしていますが、次のものしか取得できません -
<![CDATA[ ]]>

私のXMLは以下のようになります

<ROOT>
 <CHILD>
    <P><![CDATA[<ROOT><ELEMENT>SOMECONTENT</ELEMENT></ROOT>]]></P>
 </CHILD>
</ROOT>

CDATA には XML コンテンツが含まれており、それを格納するために文字列として必要です コード (スニペット) は以下のようになります

XPathFactory xpfac = XPathFactory.instance();
XPathExpression<Element> xElements = xpfac.compile(sXpath,Filters.element(),null,Namespace.getNamespace("myns", "http://www.namespace.com/ns"));
List<Element> elements = xElements.evaluate(doc);       
for (Element xElem : elements) {
    if(!isCDATA)
    {
        sRetval=xElem.getValue();
    }
    else
    {
        sRetval=xElem.getText();
    }
    return sRetval;
}

getValue()getText()のみを返しますが、正常に動作します<![CDATA[ ]]>

もちろん、私の XPAHT は次のようになります。CDATA //ROOT/CHILD/P のコンテンツを取得する方法を教えてください。

編集: <P><![CDATA[ SOMECONTENT]]></P>「SOMECONTENT」を取得している場合、CDATA から XML コンテンツを取得できません。

4

1 に答える 1

2

私はあなたの問題を再現しようとしましたが、できません.....(正しいフォーマットを得るために回答として投稿されました)....

public static void main(String[] args) throws JDOMException, IOException {
    final String xml = "<ROOT>\n <CHILD>\n    <P><![CDATA[<ROOT><ELEMENT>SOMECONTENT</ELEMENT></ROOT>]]></P>\n </CHILD>\n</ROOT>";

    Document doc = new SAXBuilder().build(new StringReader(xml));
    XPathFactory fac = XPathFactory.instance();
    XPathExpression<Element> ex = fac.compile("//ROOT/CHILD/P", Filters.element());
    for (Element e : ex.evaluate(doc)) {
        System.out.printf("getValue() %s\n", e.getValue());
        System.out.printf("getText() %s\n", e.getText());
    }
}

生成:

getValue() <ROOT><ELEMENT>SOMECONTENT</ELEMENT></ROOT>
getText() <ROOT><ELEMENT>SOMECONTENT</ELEMENT></ROOT>

私はあなたと何が違うのですか?

于 2013-04-15T02:52:11.130 に答える