обнаружение узлов в xml - PullRequest
0 голосов
/ 30 июня 2010

например, у нас есть этот xml:

<p>[TAG]
    <span>foo 1</span>
    <span>foo 2</span>
   [/TAG]
    <span>bar 1</span>
    <span>bar 2</span>
</p>

как я могу обнаружить <span> теги между словами [TAG] и [/TAG] (в данном случае "foo 1" и "foo 2")?

UPD. например, мне нужно изменить значение узла каждого промежутка между [TAG] и [/TAG]

1 Ответ

1 голос
/ 30 июня 2010

Предполагая, что у вас есть только один набор [TAG]..[/TAG] на узел (например, если у вашего документа есть два набора, они находятся внутри отдельных элементов <p> или чего-то еще), и что они всегда родные:

Вы можете использовать preceding-sibling и following-sibling, чтобы выбрать только элементы, которым предшествует текстовый узел [TAG], а затем текстовый узел [/ TAG]:

//span[preceding-sibling::text()[normalize-space(.) = "[TAG]"]][following-sibling::text()[normalize-space(.) = "[/TAG]"]]

Полный пример PHP:

$doc = new DOMDocument();
$doc->loadHTMLFile('test.xml');

$xpath = new DOMXPath($doc);

foreach ($xpath->query('//span[preceding-sibling::text()[normalize-space(.) = "[TAG]"]][following-sibling::text()[normalize-space(.) = "[/TAG]"]]') as $el) {
 $el->nodeValue = 'Changed!';
}

echo $doc->saveXML();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...