PHP SimpleXML xpath:包含和定位

Posted

技术标签:

【中文标题】PHP SimpleXML xpath:包含和定位【英文标题】:PHP SimpleXML xpath: contains and position 【发布时间】:2012-11-07 04:02:38 【问题描述】:

这是我的 php 代码:

$xml = new SimpleXMLElement('data.xml', null, true);
$q = $xml->xpath('post/misc[contains(tags,"animal")][position() <= 2]');

这里是 XML 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<posts>
    <post>
        <id>1</id>
        <misc>
            <tags>animal,tiger</tags>
            <prio>0.5</prio>
        </misc>
    </post>
    <post>
        <id>2</id>
        <misc>
            <tags>plant,coconut</tags>
            <prio>0.5</prio>
        </misc>
    </post>
    <post>
        <id>3</id>
        <misc>
            <tags>animal,lion</tags>
            <prio>0.5</prio>
        </misc>
    </post>
    <post>
        <id>4</id>
        <misc>
            <tags>animal,monkey</tags>
            <prio>0.5</prio>
        </misc>
    </post>
</posts>

如何获取标签包含“动物”的前 2 个元素?

xpath 结果应该是post:id=1post:id=3,但可以看到它返回包含animal 的所有元素。

【问题讨论】:

【参考方案1】:

将主要的 XPath 部分放在 () 括号中,即:

(//post/misc[contains(tags,"animal")])[position() <= 2]

【讨论】:

以上是关于PHP SimpleXML xpath:包含和定位的主要内容,如果未能解决你的问题,请参考以下文章

php SimpleXML 例子

PHP SIMPLEXML XPATH 匹配具有相同子字符串的多个标签

simpleXML 在 php 5.4 中不起作用

使用 PHP 的 SimpleXML 访问元素的父级?

SimpleXML 和 php - 获取包含与另一个节点匹配的文本的节点

SimpleXML 中的 XPath 用于默认命名空间,无需前缀