2011-07-18 15 views
0

XPathを使用してノードの値を取得するにはどうすればよいですか?XPathを使用してノードの値を取得するにはどうすればよいですか?

は35

/bookstore/book[price>35.00] 

上記の価格を持っているすべてのノードを取得します。しかし、私は等号のために=に>変更したときに、クエリが失敗します。 助けてください。ところで、私はPHPを使用していますが、それはXPathが普遍的であるので重要ではありません。

ここでPHPコードとXMLコードは、私はトリックが引用符で囲まれている

$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> 
<bookstore> 
<book> 
    <title lang=\"eng\">Harry Potter</title> 
    <price>29.99</price> 
</book> 
<book> 
    <title lang=\"eng\">Learning XML</title> 
    <price>39.95</price> 
</book> 
</bookstore>"; $xml = new SimpleXMLElement($xml); 

    $name = 'Shiny Red'; 
    $nodes = $xml->xpath(sprintf('/bookstore/book[price>35.00]', $name)); 
    if (!empty($nodes)) { 
     printf('At least one building named "%s" found<hr/>', $name); 
    echo "<textarea style=\"width: 400px; height: 300px;\">";print_r($nodes); echo "</textarea>"; 
    } else { 
     printf('No building named "%s" found', $name); 
    }  
+7

XMLのサンプルがないと難しいです。 – Oded

+1

XMLサンプルの次に、値を返すために、サンプルPHPコードを追加する必要があります。 – hakre

+0

テストする立場にはいませんが、 '/ bookstore/book/[number(price)= 35.00]'を試しましたか? – Wrikken

答えて

2
//bookstore/book/price[. ='35.00'] 

または

//bookstore/book[price='35.00'] 

を使用していたのです。ノード値はテキストです。あなたは'35 .00 'と何も一致しませんが、XMLにはその価格の書籍が含まれていないためです。一致する'39 .95 'が動作します(テスト済み)。

$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> 
<bookstore> 
<book> 
    <title lang=\"eng\">Harry Potter</title> 
    <price>29.99</price> 
</book> 
<book> 
    <title lang=\"eng\">Learning XML</title> 
    <price>39.95</price> 
</book> 
</bookstore>"; $xml = new SimpleXMLElement($xml); 

    $name = 'Shiny Red'; 
    $nodes = $xml->xpath(sprintf('//bookstore/book/price[. = \'39.95\']', $name)); 
    if (!empty($nodes)) { 
     printf('At least one building named "%s" found<hr/>', $name); 
    echo "<textarea style=\"width: 400px; height: 300px;\">";print_r($nodes); echo "</textarea>"; 
    } else { 
     printf('No building named "%s" found', $name); 
    } 
+0

お返事ありがとうございました。私が恩恵を申し立てる前に、質問は3週間無駄になっていた。 – desbest

+0

はい。私はそれがその恩恵のためにトップに蹴られたと思う。私は混乱していますが、誰もこの回答を前に投稿していません。 :) – GolezTrol

+0

タイトルと価格の両方を一度に検索するXPathが欲しいのですが?私は 'と'演算子を使ってみましたが、動作させることができませんでした。 – desbest