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

PHP:从xml属性中查找和检索值的正则表达式,php,xml,Php,Xml,如何编写正则表达式从xml节点检索值? 实际上节点结构非常大。所以我们不能轻易地遍历,所以我想像普通文本文件一样读取,并希望我能编写一个正则表达式来找出匹配的元素 <node1> <node2>str</node2> <node3>Text</node3> <myvalue>Here is the values string..</myvalue> </node1> str 正文 这是值字符

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

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

str
正文
这是值字符串。。
上面是我想要检索值的模式
,但是在我的xml中有很多其他节点包含
子节点。因此,找到我想要的适当节点的唯一方法是在上面的模式中。其余节点值的唯一变化是相同的
str
Text
始终相同


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

使用XML解析器,正则表达式不适合进行这种解析

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

  • ()
  • (投寄人)
下面是一个简单的DOM示例,它将找到位于
node1
中的所有
myvalue

<?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;
        }
    }
?>
getElementsByTagName('node1');
对于($i=0;$i长度;$i++){
$node1=$lst->item($i);
$myvalue=$node1->getElementsByTagName('myvalue');
如果($myvalue->length>0){
echo$myvalue->item(0)->textContent;
}
}
?>

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

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

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

但找到该节点有点困难。。这就是为什么我更喜欢regx@coderex这样更容易,而且每次都能得到准确的结果。@coderex您可以在解析XML后使用XPath搜索XML,例如使用SimpleXML:但我需要检查此alsopreg_match_all('strText([\s\s]+)'$text,$matches);但在xml中,它认为每个节点都有一个新行char,所以在这种情况下,我的尝试失败了。因此,现在我需要删除空格,换行符显示XML文档的真实示例,包括有问题的区域(许多
myvalue
节点、复杂结构等)。