使用正则表达式搜索XML标记 - PHP XPatch

时间:2013-10-14 00:32:28

标签: php xml regex search xpath

我有一个XML文档:

<product>
    <item>
        <item00>
            <name>DVD</name>
        </item00>
    </item>
</product>
<product>
    <item>
        <item11>
            <name>CD</name>
        </item11>
    </item>
</product>

我想展示这些产品的名称,但有些产品的项目为“ item00 ”和“ item11 ”。

我尝试在XPath中添加路径正则表达式,但没有成功。

我有可能使用XPath显示这些产品的名称(DVD和CD)吗?

<?php
$xml = 'file.xml';
$content = '';
$f = fopen($xml, 'r');

while($data = fread($f, filesize($xml))) {
    $content.= $data;
}
fclose($f);

preg_match_all('/\<product\>(.*?)\<\/product\>/s', $content, $product);

$product = $product[1];

$doc = new SimpleXMLElement($content);

for($i = 0; $i <= count($product) - 1; $i++) {
    // So far, no problems. Seriously.
    // The issue starts here.
    $query = $doc->xpath('/product/item/???');

    foreach($query as $item) {
        echo $item->name . '<br>';
    }
}
?>

“???”是“item00”和“item11”的问题。

如果有人知道并且可以帮助我,我将非常感激!

2 个答案:

答案 0 :(得分:0)

我认为你不能在那个环境中使用正则表达式,这就是使用属性的原因

<item num="00">

然而检查this,我相信这就是你要找的东西

那些真正应该是属性的东西

答案 1 :(得分:0)

Here is the total working code 

<?php
$xml = 'file.xml';
$content = '';
$f = fopen($xml, 'r');

while($data = fread($f, filesize($xml))) {
    $content.= $data;
}
fclose($f);
$content = "<root>$conten</root>";
$doc = new SimpleXmlElement($content);
$query = $doc->xpath('//item/child::*');
foreach($query as $item) {
    echo $item->name . '<br>';
}