2012-02-15 14 views
9

article-field1内のテキストを取得するにはどうすればよいですか?div idからxpathコンテンツを取得

<title>Testing</title> 
    <link>http://example.org</link> 
    <description>Description</description> 
    <language>en-us</language> 
    <lastBuildDate>Mon, 13 Feb 2012 00:00:00 +0000</lastBuildDate> 

    <item> 
    <title>Title Here</title> 
    <link>http://example.org/2012/03/27/</link> 
    <description><![CDATA[ 
     <div id="article-field1"><a href="http://example.org/test1">Test 1</a></div> 
     <div id="article-field2">123</div> 
    <pubDate>Tue, 2 Mar 2012 00:00:00 +0000</pubDate> 
    </item> 

私は

//description/div[@id="article-field1"]/text() 

どれ助言を使用しようとしましたか?

おかげ

+3

不正なXML( '<![CDATA ['に対応する終了タグはありません)を投稿しました。おそらくXPathを実行しようとしているのと同じXMLではありません。これが本当に入力XMLであれば、XPathが結果を返さないのは不思議ではありません。また、あなたの 'div'sが' <![CDATA ['ブロックの中にある場合、それらは入力XMLツリーの一部ではなくテキストコンテンツなので、特定の' div'を得る方法はありません。 – penartur

+1

あなたのCDATAセクションの終わりがわかりません。閉じ括弧が2つあります。実際、サンプルには2番目の説明の終了タグがありません。それはちょうど不正な形式です。正してください。 – ingyhere

+0

@shadow:ドキュメントから '<![CDATA ['を削除することをお勧めします。あなたのXPath式は、新しいドキュメントの希望するノードを選択するかもしれません。 –

答えて

2

あなたは、プレーン・バニラXPathプロセッサの1回の呼び出しでそれを行うことはできません。

  1. dyn:evaluate()機能を実装して、特定のXPathプロセッサを使用します:

    は、次の2つの選択肢があります。(これは質問を頼む何プロセッサとバージョンを使用しています?) OR

  2. 2回の呼び出しを使用します。最初に/ title/item/descriptionノードのテキスト値を取得します。 2番目は、最初の結果を新しいXMLドキュメントとしてロードした後(xmlフラグメントを適切なxmlドキュメントに変換するためにいくつかのtweeksを使用)、div [@ id = "article-field1"]です。
+0

注:title/item/descriptionノードの内容は純粋な文字データでXMLではなく、 "// description/div [@ id =" article-field1 "]/text()"は機能しません。 –

2
//description/div[@id="article-field1"]/a/text() 

、ルート要素が追加され、対応する「説明」タグが閉じられています。これは、元のXMLを部分的に貼り付けるエラーを前提としています。基本的に、元のクエリにはa要素がありませんでした。

これはhttp://www.xpathtester.com/で確認できます。

関連する問題