2
header = new LinkedHashMap<String,Object>();
Element headerElement = (Element)doc.getElementsByTagName( "Header").item(0);
NodeList elementList = headerElement.getElementsByTagName( "*" );
for( int index =0; index < elementList.getLength(); index++ ){
    Node element = elementList.item(index);
    System.out.println( element.getChildNodes().item(0).getTextContent() ); // Statement A          
    System.out.println( element.getTextContent()); // Statement B

ステートメント A とステートメント B の両方が同じ出力を印刷しています。

すべてのノードがそれ自体の子ノードであるということはどういう意味ですか??

入力 XML は次のとおりです。

<Header>
    <tag1>1</tag1>
    <tag2>2</tag2>
    <tag3>3</tag3>
    <tag4>4</tag4>
</Header>
4

2 に答える 2

3

ドキュメントNode.getTextContent()から、ノード タイプの場合ELEMENT_NODE:

COMMENT_NODE および PROCESSING_INSTRUCTION_NODE ノードを除く、すべての子ノードの textContent 属性値の連結。ノードに子がない場合、これは空の文字列です。

一方、テキスト ノードの場合、メソッドの戻り値は単にnodeValue、つまりノードのテキストです。

そうです-テキストノードである単一の子ノードを持つ要素でこれを呼び出すと、そのテキストノードで直接呼び出すのと同じ結果が得られます。しかし、それ以外の場合は、異なる結果が得られます。たとえば、次のような要素があるとします。

<tag>1<break />2</tag>

2 つの子テキスト ノードと 1 つの子要素ノードがあり、結果は "1 2" (または "12" の可能性があります。この連結で間隔がどのように機能するかはわかりませんが、確認できます)。

これは、「それ自体を含む」ノードの問題ではありません。単純に、このメソッドが何を行うかの定義の問題です。

于 2013-01-17T07:18:29.353 に答える
1

getTextContent()returnsは、このノードとその子孫のテキストコンテンツを返します。

で実行されたステートメントAtag1は、以下のテキストノードを返します(1

同じ場所で実行されたステートメントBは、tag1(1つのテキストノードを持つリスト)の子ノードを取得し、最初の(唯一の)テキストノードを選択して、そのテキスト値を表示します。

この場合、それらは同じものです。

于 2013-01-17T07:20:46.683 に答える