3

私のXMLファイルは次のように構成されています:

<parent xml:space="preserve">
Hello, my name is
    <variable type="firstname">ABC</variable>
and my last name is 
    <variable type="lastname">XYZ</variable>
</parent>

この形式でテキスト出力を取得する方法が必要です。

「こんにちは、私の名前はABCで、姓はXYZです」.

jdom2 を使用する際の問題は、 element.getText() メソッドが文字列全体を単一の文字列として返すことです (子タグの位置に関係なく)。

「こんにちは、私の名前はです、そして私の名字はです」.

とにかく、子タグの位置を取得したり、それらを区切ったりして、後で手動で変数を挿入できるようにすることはできますか?

4

2 に答える 2

1

editこの例では、DOM 用の Java ランタイム API に含まれている Xerces パーサーを使用しています。JDOM2 ソリューションについては、rolfl からの回答を参照してください。

出発点として、次のスニペットを使用できます。本当に達成したいことに基づいて、変更は自分で行う必要があります。

xml = "<parent xml:space=\"preserve\">\n"
        + "Hello, my name is\n"
        + "    <variable type=\"firstname\">ABC</variable>\n"
        + "and my last name is \n"
        + "    <variable type=\"lastname\">XYZ</variable>\n"
        + "</parent>";

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodeList = (NodeList) xPath.compile("//parent").evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
    System.out.println(nodeList.item(i).getTextContent());
}

出力

Hello, my name is
    ABC
and my last name is 
    XYZ

スニペットは最適化されていません。もっとPoCとして見てください。

于 2015-04-24T11:07:28.460 に答える
0

getText は JDOM で指定され、要素の直接のテキスト コンテンツを返します。JDOM には以下を返すメソッドもあります。getValue()

この要素の XPath 1.0 文字列値を返します。これは、この要素のすべてのテキスト ノードの子孫の順序付けられた完全なコンテンツです (つまり、すべての参照が解決され、他のすべてのマークアップが削除された後に残るテキストです)。

これをドキュメントに適用します。

    Document doc = new SAXBuilder().build("parentwtext.xml");
    Element root = doc.getRootElement();
    System.out.println(root.getValue());

出力を取得します (最初にここに表示できない空の行があります):

Hello, my name is
    ABC
and my last name is 
    XYZ
于 2015-04-24T12:15:47.200 に答える