【问题标题】:PHP: regular expression to find out and retrieve values from xml attributesPHP:从 xml 属性中查找和检索值的正则表达式
【发布时间】:2010-09-26 18:03:44
【问题描述】:

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

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

以上是我要检索值&lt;myvalue&gt;&lt;/myvalue&gt; 的模式,但在我的 xml 中有很多其他节点包含 &lt;myvalue&gt; 子节点。因此,找出我想要的适当节点的唯一方法是在上述模式中。其余节点值的唯一变化是相同的&lt;node2&gt;str&lt;/node2&gt;&lt;node3&gt;Text&lt;/node3&gt; 始终相同。

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

【问题讨论】:

  • 展示一个真实的XML文档示例,包括有问题的地方(很多myvalue节点、复杂的结构等)。

标签: php xml


【解决方案1】:

使用 XML 解析器,Regex 不适合做那种解析。

这是您可以使用的 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;
        }
    }
?>

【讨论】:

  • 但是找到那个节点有点困难..这就是为什么我更喜欢 regx
  • @coderex 更简单,每次都能得到准确的结果。
  • @coderex 您可以在解析 XML 后使用 XPath 搜索它,例如使用 SimpleXML:tuxradar.com/practicalphp/12/3/3
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果你坚持为此使用正则表达式,请尝试

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

    【讨论】:

    • 但我也需要检查一下
    • preg_match_all('strText([\s\S]+)' $text, $matches);
    • 但在 xml 中,每个节点都有一个新行 char ,它认为,所以在这种情况下我的尝试失败了。所以现在我需要删除换行符的空格
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    相关资源
    最近更新 更多