3

XML を解析するために Java API と XPath を使用しています。次のような XML があります。

<animals>
  <dog>
    <looks>dangerous </looks> 
     <bites> hard </bites>
     <growls> yes </growls>
  </dog>
  <cat>nothing special</cat>
</animals>

XPath 条件を出力したい

<dog>
  <looks>dangerous </looks> 
  <bites> hard </bites>
  <growls> yes </growls>
</dog>

しかし、私は今できません。私が/animal/dog/text()それを使用すると、 が得られdangerousます。しかし、印刷テキストだけで使用されていると思います。XPath 条件を使用して XML のブロックを取得する方法はありますか?

編集

ご回答ありがとうございます。これに費やした時間を大切にしてください。内部テキストを印刷せずにJavaでそれを行う方法はありますか?

私のXPath条件は次のとおりです。

public static final String XPATH_INPUT_DATA="//text()";
4

3 に答える 3

2

/animals/dog を使用すると、すべての子ノードを含む「犬」ノードが返されます。そのノードの内部 xml を印刷すると、必要なものが得られます。

于 2008-10-15T07:21:41.380 に答える
1

XPathが行うのは、ノードを選択することだけです。// text()テストは、ドキュメント内からすべてのテキストノードを選択するだけです。要素は、要素ノードとしてのみドキュメントに存在し、あなたが示唆しているようにテキストのブロックとしては存在しません。これらの要素をテキストに変換する場合は、Javaレベルで(内部テキストを印刷して)この変換を行う必要があります。

于 2008-10-21T13:12:20.017 に答える
1

コマンドラインツールxpathを使用した rslite の方法のデモンストレーション(Perl で書かれていますが、標準の Xpath であり、どこでも動作するはずです):

% xpath -e /animals/dog animals.xml 
Found 1 nodes in animals.xml:
-- NODE --
<dog>
   <looks>dangerous </looks> 
   <bites> hard </bites>
   <growls> yes </growls>
</dog>
于 2008-10-15T12:30:46.610 に答える