2009-04-20 22 views
0
$xpath->query('/html[boolean(string(normalize-space(@xml:lang))) = "true"]') 

通常、上記のクエリは機能しますが、この場合、xhtml属性xml:langにはコロンが入ります。それを実体で置き換える。& 59;いずれも機能しません。特殊文字を含むxpath属性

提案がありますか?

+0

私達にあなたのXMLの簡略サンプルをご提示ください。 – Cerebrus

+0

EddyR

+0

これはperlです。どのXMLライブラリですか? –

答えて

1

これは、注意すべき

重要なことは、属性xmlということで、本当にいっぱいな答えはありませんが...:langはそれでコロンを持っていません。属性 'lang'は全く同じではない 'xml'名前空間です。 xml名前空間は(何らかの形で) '組み込み'です。

第二に、私はあなたがおそらく意味だと思う:

真実と虚偽として
'/html[boolean(string(normalize-space(@xml:lang))) = true()]' 

は、XPath内の文字列ではありません。

は今、私はXML ::のlibxmlを使用して、Perlで次のスクリプトを実行してきたし、それだけで正常に動作します:

<?xml version='1.0'?> 
<html xml:lang='en-uk'> 
     <head><title>boo</title></head> 
     <body><p>boo</p></body> 
</html> 

を出力します:私の入力としてこれを使用して

#!/usr/bin/perl 

use strict; 
use warnings; 
use XML::LibXML; 

my $parser = XML::LibXML->new; 
my $xml = $parser->parse_file('test.html'); 

my ($node) = $xml->findnodes('/html[boolean(string(normalize-space(@xml:lang))) = true()]'); 


print $node->textContent, "\n"; 

期待される出力( "boo\nboo")。

完全に名前空間を認識していないパーサーを使用しているのだろうかと思います。また、「作品」とはどういう意味ですか? html要素にxml:lang属性があるかどうか調べようとしていますか?

あなたがいる場合、これはおそらくより良い声明のようになります。

'/html[@xml:lang]' 
+0

それはまさに私が意味するものです。私はPHPのdomxpathを使用しているので、あなたのクエリがうまく動作していて驚いています。多分PHPのライブラリのバグですか? – EddyR