2

名前から兄弟を取得するにはどうすればよいですか?私は入れ子になったものをしません。同じレベルの1つだけ。これはどのように可能ですか?

<root available-locales="en_US" default-locale="en_US">
    <dynamic-element instance-id="qk6m4eST" name="image" type="image" index-type="">
        <dynamic-element instance-id="fHkE2dfT" name="subimage" type="image" index-type="">
            <dynamic-element instance-id="jbthDbC4" name="x" type="text" index-type="">
               <dynamic-content>23</dynamic-content>
            </dynamic-element>
            <dynamic-element instance-id="Rb3qRF6N" name="y" type="text" index-type="">
                <dynamic-content>32</dynamic-content>
            </dynamic-element>
            <dynamic-content><![CDATA[C:\fakepath\images (1).jpeg]]></dynamic-content>
        </dynamic-element>
        <dynamic-content><![CDATA[C:\fakepath\images (1).jpeg]]></dynamic-content>
    </dynamic-element>
    <dynamic-element instance-id="MFrJW4OR" name="image" type="image" index-type="">
        <dynamic-element instance-id="hjKEtVB6" name="subimage" type="image" index-type="">
            <dynamic-element instance-id="NrY9iZ4K" name="x" type="text" index-type="">
                <dynamic-content>23</dynamic-content>
            </dynamic-element>
            <dynamic-element instance-id="7lG7RuAC" name="y" type="text" index-type="">
                <dynamic-content>32</dynamic-content>
            </dynamic-element>
            <dynamic-content><![CDATA[C:\fakepath\grillat.jpeg]]></dynamic-content>
        </dynamic-element>
        <dynamic-content><![CDATA[C:\fakepath\images (1).jpeg]]></dynamic-content>
    </dynamic-element>
</root>

これはこれまでの私のコードです。印刷します

テスト......23

これが最初のネストされた子の値です。23

public List<PopupImage> getImageNodes(Document document) {
    List<Node> nodes = document.selectNodes("/root/dynamic-element[@name='" + IMAGE_NODE_NAME + "']");

    List<PopupImage> popupImages = new ArrayList<PopupImage>();
    for (Node node : nodes) {
        // node.selectSingleNode("//following-sibling::dynamic-content[1]").getText();
        System.out.println("test...... " + node.selectSingleNode("//following-sibling::dynamic-content").getText());
        createPopupImage(node);
        popupImages.add(createPopupImage(node));
    }
    return popupImages;
}

編集:すべての画像ノードとその中の動的値の値が必要です。

<root>
    <dynamic-element name=image>
         <dynamic-element name=subimage/>
         <dynamic-content>content1</dynamic-content> 
    </dynamic-element>  

     <dynamic-element name=image>
         <dynamic-element name=subimage/>
         <dynamic-content>content2</dynamic-content>  
    </dynamic-element> 
</root>

edit2:

もっと明確にするために。各画像ノードを動的コンテンツとペアリングする必要があります。

4

2 に答える 2

1

使用

/*/dynamic-element[@name='image'][1]/dynamic-content

これにより、最上位要素の最初の子であり、属性の文字列値が文字列dynamic-contentであるの子であるものが選択されます。dynamic-elementdynamic-elementname"image"

そしてこのXPath式

/*/dynamic-element[@name='image']/dynamic-content

選択

<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>
<dynamic-content>C:\fakepath\images (1).jpeg</dynamic-content>

テキストノードだけが必要な場合は、次を使用します

/*/dynamic-element[@name='image']/dynamic-content/text()

これにより、前の式で選択された要素の次の2つのテキストノードの子が選択されます。

C:\fakepath\images (1).jpeg
C:\fakepath\images (1).jpeg

返されたノードを繰り返し処理し、そこに含まれるXmlNodeListXmlNodeオブジェクトの値を取得することで、選択したノードの値を取得できます。

于 2012-08-04T18:12:12.703 に答える
0

現在、<dynamic-element>要素を選択した後、次のXPathを実行します。

//following-sibling::dynamic-content

これが何を意味するか見てみましょう:

  • //:ドキュメントルートに戻り、任意のレベルでネストされているすべてのノードを検討します。
  • following-sibling:::前のノードの兄弟であるノードを検索します(つまり、同じネストレベルにあり、同じ親ノードを持ちます)。
  • dynamic-content:この兄弟ノードは<dynamic-content>要素である必要があります。

これはあなたのテキストで説明されているようにあなたが望むものではありません。

むしろ、現在のノードの次の兄弟を検索する必要があります。その兄弟は<dynamic-element>要素になります。<dynamic-content>その兄弟で、子ノード、つまり要素を見つけたいと思います。

したがって、node.selectSingleNode呼び出しでこのXPathを試してください。

following-sibling::dynamic-element/dynamic-content
于 2012-08-04T17:36:52.010 に答える