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

通常,上述查询可以工作,但在这种情况下,xhtml属性xml:lang在其中包含冒号。用实体代替& 59;也不起作用。带特殊字符的xpath属性

有什么建议吗?

+0

请告诉我们您的XML的缩写样品。 – Cerebrus 2009-04-20 11:12:26

+0

EddyR 2009-04-20 11:17:23

回答

1

这是不是一个真正的完整的答案,但...

需要注意的重要一点是,属性的​​XML:郎咸平没有在这一个冒号。属性'lang'是'xml'命名空间,它不完全相同。 xml命名空间(在某些方面)是“内置的”。

其次,我想你大概的意思是:

'/html[boolean(string(normalize-space(@xml:lang))) = true()]' 

为真理和谬误没有XPath中的字符串。

现在,我已经运行在Perl下面的脚本,使用XML ::的libxml和它工作得很好:

#!/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"; 

以此作为我的输入:

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

打印出预期产出(“boo\nboo”)。

我不知道你是否使用了一个不完全知道名称空间的解析器。另外,“作品”是什么意思?你是否想知道html元素是否具有xml:lang属性?

如果你是,这可能会是一个更好的说法:

'/html[@xml:lang]'