атрибут xpath со специальным символом - PullRequest
0 голосов
/ 20 апреля 2009
$xpath->query('/html[boolean(string(normalize-space(@xml:lang))) = "true"]')

Обычно вышеуказанный запрос будет работать, но в этом случае атрибут xhtml xml: lang содержит двоеточие. Замена его на сущность & 59; тоже не работает.

Есть предложения?

1 Ответ

1 голос
/ 20 апреля 2009

Это не полный ответ, но ...

Важно отметить, что атрибут xml: lang не содержит двоеточия. Атрибут '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]'
...