使用Xpath查找具有特定子元素的XML节点

Mar*_*ean 6 php xml xpath

我是XPath世界的新手.我想采用XML方法为我的简单组合网站而不是数据库提供支持,在这种情况下,数据库将是多余的,因为唯一的数据库元素就是项目本身.

我编写了一个具有以下结构的XML文件:

<?xml version="1.0" encoding="UTF-8" ?>
<projects>
    <project>
        <title>A-Merchandise</title>
        <slug>a-merchandise</slug>
        <projectType>E-commerce</projectType>
        <launchDate>2007-08-01</launchDate>
    </project>
    ...
Run Code Online (Sandbox Code Playgroud)

现在,我可以使用PHP解析这个XML文件以获得列表概述,但是如何使用XPath过滤项目?例如,如何获取project具有projectType值为的子节点的所有节点e-commerce

通常,我会运行SQL查询,如:

SELECT * FROM `projects` WHERE `category` = 'e-commerce';
Run Code Online (Sandbox Code Playgroud)

XPath等价物是什么?我的XML文件是否采用正确的结构来容纳此过滤?

任何指针都会很棒.提前致谢.

Jon*_*n B 7

我相信你想要这个:

/projects/project[projectType="e-commerce"]
Run Code Online (Sandbox Code Playgroud)

[]过滤器选择所有project下元素projects谁拥有projectType与价值孩子"e-commerce"

我还发现这个站点非常有助于搞乱XPath和XSLT查询.

进一步阅读:http://www.w3schools.com/xpath/xpath_syntax.asp


Mr *_*der 6

考虑到你的xml文件名是foo.xml,并且在bar.php的同一目录中有内容

$projects = simpleXMLElement('foo.xml',null,true);

$ecomProjects = $projects->xpath('project[projectType="E-commerce"]');

foreach($ecomProjects as $ecomProject)
{
echo $ecomProject; // or do whatever with it
}
Run Code Online (Sandbox Code Playgroud)