2

現在、からデータを抽出する作業を行っていますHTML<p class="xfHeading">2つのタグの間のテキストを抽出したいと思います。

         <p class="xfHeading"><b>XYZ:</b></p> 
            <p>asdfghjk</p>  
            <p>sdsdsd</p>  
            <p>asdvcvcfghjk</p>  

         <p class="xfHeading"><b>ABC:</b></p> 
            <P>fvgbhnjm</P>  

         <p class="xfHeading"><b>PQR:</b></p> 
            <ul> 

            </ul> 

         <p class="xfHeading"><b>MNO:</b></p> 
             <ul> 
                <li>jdjshdj</li>  
             </ul> 

出力は次のようになります。

asdfghjk

sdsdsd

asdvcvcfghjk

これを行う1つの方法は次のとおりです。

/p[class="xfHeading"]/following-sibling::p[0]|/p[class="xfHeading"]/following-sibling::p[1]|/p[class="xfHeading"]/following-sibling::p[2]

また

/p[class="xfHeading"]/following-sibling::p[position()<4]

ただし、その間のコンテンツは常に変化し続けるため、2つのタグ間のコンテンツを<p class="xfHeading">抽出するソリューションが必要です。

4

2 に答える 2

0

編集:あなたの説明の後、私の提案は次のようなFLWOR式を使用することです。これは、そのタグの一意のコンテンツに基づい<p>て適切なタグコンテンツを持つを検索し、その兄弟である各タグのテキストを返します。<b><b><p>

for $b in //p[class="xfHeading"]/b and $p in //p[class="xfHeading"]/p
    where $b/text() = "XYZ:"
        return p/text()

//これはXPATH構造であり、コメントではないことに注意してください

古い答え:結果のデータをどのように見せたいかという例がなければ、質問に答えるのは少し難しいです。ただし、たとえば、<b>タグ内のテキストを選択するには、次のようにします。

/p[class = "xfHeading"]/b/text()

一般にtext()、式の末尾に追加すると、問題のノード内のテキストが返されます。

于 2010-06-25T13:39:54.580 に答える
0

使用:

(//p[@class="xfHeading"])[1]
          /following-sibling::p
             [. << (//p[@class="xfHeading"])[2]]
                 /text()

これは、次のことを意味します: の値を持つ属性を持つドキュメント内の最初の要素pの兄弟に続き、同時に、値を持つ属性を持つドキュメント内の 2 番目の要素の前にあるすべての要素のテキストノードの子を選択します。pclassxfHeadingpclassxfHeading

于 2010-06-25T21:09:18.017 に答える