Xpath Regex in PHP not working(PHP中的XPath Regex不起作用)
                            本文介绍了PHP中的XPath Regex不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
                        
                        问题描述
以下是我返回的XML:
<?xml version="1.0" encoding="utf-8"?>
    <lists>
        <list>
            <id>6791</id>
            <title><![CDATA[List 1]]></title>
            <type>0</type>
            <priority>0</priority>
            <due><![CDATA[0000-00-00 00:00:00]]></due>
            <notes><![CDATA[]]></notes>
            <user_id>49211</user_id>
            <owner><![CDATA[]]></owner>
            <item1>
                <done>0</done>
                <title><![CDATA[Bamboo Montage-83 Knee High Studded Contrast Colored Zipper Riding Boot - Brown PU]]></title>
                <barcode>B00H2Y2UY6</barcode>
                <priority>2</priority>
                <item_id>57741</item_id>
            </item1>
            <item2>
                <done>0</done>
                <title><![CDATA[List 2]]></title>
                <barcode><![CDATA[]]></barcode>
                <priority>2</priority>
                <item_id>57751</item_id>
            </item2>
            <item3>
                <done>0</done>
                <title><![CDATA[List Item 1]]></title>
                <barcode><![CDATA[]]></barcode>
                <priority>2</priority>
                <item_id>57761</item_id>
            </item3>
        </list>
我想获取带有数字的list->item[0-9]节点,我正在使用PHP的SimpleXMLElement类来获取它们,但我无法使用正则表达式获取节点。以下是我的代码:
    foreach ($list_xml->lists->xpath("/list/^item[0-9]$") as $listItem) {
             echo $listItem->title;
    }
注意$LIST_XML的转储如下所示:
SimpleXMLElement Object
(
[lists] => SimpleXMLElement Object
    (
        [list] => Array
            (
                [0] => SimpleXMLElement Object
                    (
                        [id] => 6791
                        [title] => SimpleXMLElement Object
                            (
                            )
                        [type] => 0
                        [priority] => 0
                        [due] => SimpleXMLElement Object
                            (
                            )
                        [notes] => SimpleXMLElement Object
                            (
                            )
                        [user_id] => 49211
                        [owner] => SimpleXMLElement Object
                            (
                            )
                        [item1] => SimpleXMLElement Object
                            (
                                [done] => 0
                                [title] => SimpleXMLElement Object
                                    (
                                    )
                                [barcode] => B00H2Y2UY6
                                [priority] => 2
                                [item_id] => 57741
                            )
                        [item2] => SimpleXMLElement Object
                            (
                                [done] => 0
                                [title] => SimpleXMLElement Object
                                    (
                                    )
                                [barcode] => SimpleXMLElement Object
                                    (
                                    )
                                [priority] => 2
                                [item_id] => 57751
                            )
                        [item3] => SimpleXMLElement Object
                            (
                                [done] => 0
                                [title] => SimpleXMLElement Object
                                    (
                                    )
                                [barcode] => SimpleXMLElement Object
                                    (
                                    )
                                [priority] => 2
                                [item_id] => 57761
                            )
                    )
           )
    )
推荐答案
SimpleXmlElement由只支持XPath 1.0的libxml2支持。XPath 1.0不支持与正则表达式的字符串匹配,XPath 2.0支持。
因此有两个选项处于打开状态:
选项1:继续使用XPath 1.0
在这种情况下,您可以尝试动态构建XPath查询以匹配所有item*节点:
$items=array();
for($i=0; $i<10; $i++) {
   $items[] = '/list/item' . $i;
}
$xpath=join($items, '|'); // $xpath == '/list/item1|/list/item2| ...'
选项2:迁移到XPath 2.0
没有将此支持添加到PHP的计划。阅读这个SO问题: (What is the best way to use XSLT 2.0 with PHP?)用于查找解决办法。在撰写本文时,它是关于这个主题的最真实的文章之一。
这篇关于PHP中的XPath Regex不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
				 沃梦达教程
				
			本文标题为:PHP中的XPath Regex不起作用
				
        
 
            
        
             猜你喜欢
        
	     - PHP foreach() 与数组中的数组? 2022-01-01
 - PHP - if 语句中的倒序 2021-01-01
 - 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
 - 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01
 - 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01
 - Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01
 - 如何在 Symfony2 中正确使用 webSockets 2021-01-01
 - openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
 - Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
 - 覆盖 Magento 社区模块控制器的问题 2022-01-01
 
