質問

私は現在、データの抽出に取り組んでいます HTML. 。 2つの間にテキストを抽出したいと思います <p class="xfHeading"> タグ。

         <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"> 抽出されます。

役に立ちましたか?

解決

使用する:

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

これの意味は: :すべてのテキストノードの子供を選択します p 最初の兄弟に続いている要素 p ドキュメントの要素 class の値を持つ属性 xfHeading, 、そして同時に2番目の前にあります p ドキュメントの要素 class の値を持つ属性 xfHeading.

他のヒント

編集: :あなたの明確化の後、私の提案は 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() 式の最後まで、問題のノード内のテキストを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top