1

次のような XML ファイルがあります。

<description>
  <text>blahblah</text>
  <code>code</code>
  <text>blah</text>
</description>

ノードdescriptionに移動しました。 などを含む完全なコンテンツを読みたいと思い<text>ます。

を使用しましたgetText()が、空の文字列が返されました。
を使用しましたgetStringValue()が、すべての<text>.
を使用しましasXML()た。結果は近いですが、結果に<description>は望ましくないものが含まれています。

要素の XML コンテンツを取得する方法はありますか?

4

4 に答える 4

3

documentであり、 のインスタンスであると仮定するとorg.dom4j.Document

String xPath = "description";
List<Node> nodes = document.selectNodes( xPath );
for (Node node : nodes) {
 node.asXML()
}
于 2011-11-29T11:59:14.460 に答える
3

このようなもの:

public static void main(String[] args) throws DocumentException {
  String xml = "<description><text>blahblah</text><code>code</code><text>blah</text></description>";
  SAXReader reader = new SAXReader();
  Document doc = reader.read(new StringReader(xml));
  Element description = doc.getRootElement();
  String content = getContent(description);
  System.out.println(content);
}

private static String getContent(Element element) {
  StringBuilder builder = new StringBuilder();
  for (Iterator<Element> i = element.elementIterator(); i.hasNext();) {
    Element e = i.next();
    builder.append(e.asXML());
  }
  return builder.toString();
}

要素にテキスト コンテンツ自体がある場合、テキスト コンテンツは返されず、子ノードのみが返されることに注意してください。

于 2011-11-29T11:52:04.717 に答える
0

XPath の使用を検討する必要があります: http://www.ibm.com/developerworks/library/x-javaxpathapi/index.html

于 2011-11-29T11:24:37.003 に答える
0

qwerkyで受け入れられた回答に追加したいだけです:

また、テキストのみの要素のコンテンツを解析できるようにするには (つまり、ネストされた xml を含まない):

public static String getContent(Element element) {
    if (element.isTextOnly())
        return element.getText();
    StringBuilder sb = new StringBuilder();
    Element currElement = null;
    for (Iterator<Element> iterator = element.elementIterator() ; iterator.hasNext() ; /* Continue till done */) {
        currElement = iterator.next();
        sb.append(currElement.asXML());
    }
    return sb.toString();
}

そのため、メソッドの開始時に次を追加しました。

if (element.isTextOnly())
    return element.getText();
于 2014-04-01T23:04:05.033 に答える