PHP:正则表达式,用于从xml属性中查找和检索值

时间:2010-09-26 18:03:44

标签: php xml

如何编写正则表达式以从xml节点检索值? 实际上节点结构非常大。所以我们不能轻易遍历,所以我想读作普通的文本文件,希望我能写一个正则表达式来找出匹配的元素。

<node1>
 <node2>str</node2>
 <node3>Text</node3>
 <myvalue>Here is the values string..</myvalue>
</node1>

以上是我想要检索值<myvalue></myvalue>的模式,但在我的xml中有很多其他节点包含<myvalue>子节点。因此,找到我想要的适当节点的唯一方法是在上面的模式中。值剩余的节点值的唯一更改是<node2>str</node2><node3>Text</node3>始终相同。

那么如何为php编写正则表达式呢?

3 个答案:

答案 0 :(得分:2)

使用XML解析器,Regex不适合进行这种解析。

以下是您可以使用的XML解析器列表:

以下是使用DOM的简单示例,该示例将找到myvalue中的所有node1

<?php
    $document = new DOMDocument();
    $document->loadXML(
        '<all>
            <myvalue>Elsewhere</myvalue>
            <node1>
                <node2>str</node2>
                <node3>Text</node3>
                <myvalue>Here is the values string..</myvalue>
            </node1>
        </all>');
    $lst = $document->getElementsByTagName('node1');

    for ($i=0; $i<$lst->length; $i++) {
        $node1= $lst->item($i);
        $myvalue = $node1->getElementsByTagName('myvalue');

        if ($myvalue->length > 0) {
            echo $myvalue->item(0)->textContent;
        }
    }
?>

答案 1 :(得分:1)

PHP有一个基于SAX的XML解析器,它允许您使用真正的XML解析器,而无需将整个DOM树存储在内存中。 XMLReader允许您解析文件,甚至无需将整个文件读入内存。使用正则表达式挖掘XML将会很痛苦。

答案 2 :(得分:0)

如果您坚持使用正则表达式,请尝试

preg_match_all('<myvalue>([\s\S]+)<\/myvalue>', $text, $matches);