类似 jQuery-like selectors for PHP DOMDocument

2022-08-30 21:45:43

我正在使用DOMDocument,我想知道是否存在某种使用类似CSS的选择器来选择节点的方法,就像我们在jQuery中一样。

示例情况:我正在解析一个 XML 文件,其中一个代码段如下所示:

<gesmes:Envelope>
    <gesmes:subject>Reference rates</gesmes:subject>
    <gesmes:Sender>
        <gesmes:name>European Central Bank</gesmes:name>
    </gesmes:Sender>
    <Cube>
        <Cube time="2009-07-13">
            <Cube currency="USD" rate="1.3975"/>
            <Cube currency="JPY" rate="129.03"/>
            <Cube currency="BGN" rate="1.9558"/>
            <Cube currency="CZK" rate="26.028"/>
        </Cube>
    </Cube>
</gesmes:Envelope>

使用类似jQuery的选择器访问这个结构将非常简单。例如,我可以使用

$("Cube[currency]")

以检索具有“货币”属性的所有元素。Cube

但是我怎么能用PHP做同样的事情呢?我想选择具有属性或具有特定属性值的元素。DOMDocument


答案 1

如果你想操纵DOM ala Jquery,PHPQuery就是你的东西。

http://code.google.com/p/phpquery/

一个简单的例子,说明你可以用它做什么。

// almost everything can be a chain
$li = null;
$doc['ul > li']
        ->addClass('my-new-class')
        ->filter(':last')
                ->addClass('last-li');

答案 2

看看 PHP 中的 DOMXPath 类。它使用 XPath,因此,如果您不熟悉它,则需要阅读 XPath 语法。MSDN 上有一些文档,或者如果您特别勇敢,可以阅读 W3 规范

解决您的示例问题:是一个 XPath 查询,用于选择文档中具有 currency 属性的所有元素。在类中将此用法如下所示://cube[@currency]DOMXPath

$xpath = new DOMXpath($myDomDocument);
$cubesWithCurrencies = $xpath->query('//cube[@currency]');

$cubesWithCurrencies现在是一个可以迭代的 DOMNodeList


推荐