$xpath->query('/html[boolean(string(normalize-space(@xml:lang))) = "true"]')
通常、上記のクエリは機能しますが、この場合、xhtml属性xml:langにはコロンが入ります。それを実体で置き換える。& 59;いずれも機能しません。特殊文字を含むxpath属性
提案がありますか?
$xpath->query('/html[boolean(string(normalize-space(@xml:lang))) = "true"]')
通常、上記のクエリは機能しますが、この場合、xhtml属性xml:langにはコロンが入ります。それを実体で置き換える。& 59;いずれも機能しません。特殊文字を含むxpath属性
提案がありますか?
これは、注意すべき
重要なことは、属性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]'
それはまさに私が意味するものです。私はPHPのdomxpathを使用しているので、あなたのクエリがうまく動作していて驚いています。多分PHPのライブラリのバグですか? – EddyR
私達にあなたのXMLの簡略サンプルをご提示ください。 – Cerebrus
– EddyR
これはperlです。どのXMLライブラリですか? –