带有特殊字符的xpath属性

时间:2009-04-20 10:57:01

标签: xpath expression special-characters

$xpath->query('/html[boolean(string(normalize-space(@xml:lang))) = "true"]')

通常上面的查询都可以,但在这种情况下,xhtml属性xml:lang中有冒号。用实体替换它& 59;也不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

其次,我认为你可能意味着:

'/html[boolean(string(normalize-space(@xml:lang))) = true()]'
因为真理和虚假不是xpath中的字符串。

现在,我使用XML :: LibXML在perl中运行以下脚本,它运行正常:

#!/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]'