XPath是一种用来在XML文档中定位节点的语言,SimpleXML自带xpath()方法,可以利用XPath表达式查询节点。
假设我们需要从如下XML中获取所有book节点中,author是“李四”的书籍标题。
<span><span><span class="hljs-variable">$xmlString</span></span><span> = <span class="hljs-string"><<<XML
<books>
<book id="1">
<title>PHP入门</title>
<author>张三</author>
</book>
<book id="2">
<title>XML</span>解析实战</title>
<author>李四</author>
</book>
<book id=</span><span><span class="hljs-string">"3"</span></span><span>>
<title>深入理解PHP</title>
<author>李四</author>
</book>
</books>
XML;
</span><span><span class="hljs-variable">$xml</span></span><span> = </span><span><span class="hljs-title function_ invoke__">simplexml_load_string</span></span><span>(</span><span><span class="hljs-variable">$xmlString</span></span><span>);
</span><span><span class="hljs-comment">// XPath查询author为李四的book节点</span></span><span>
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-></span><span><span class="hljs-title function_ invoke__">xpath</span></span><span>(</span><span><span class="hljs-string">"//book[author='李四']"</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$book</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"书名:"</span></span><span> . </span><span><span class="hljs-variable">$book</span></span><span>->title . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
运行结果:
<span><span>书名:</span><span><span class="hljs-type">XML</span></span><span>解析实战
书名:深入理解PHP
</span></span>
//book:选取所有book节点
[author='李四']:过滤条件,选出author节点值为“李四”的book节点
获取所有book的id属性:
<span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$xml</span></span><span>-></span><span><span class="hljs-title function_ invoke__">xpath</span></span><span>(</span><span><span class="hljs-string">"//book"</span></span><span>) </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$book</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"书ID:"</span></span><span> . </span><span><span class="hljs-variable">$book</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
获取id大于1的书:
<span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-variable">$xml</span></span><span>-></span><span><span class="hljs-title function_ invoke__">xpath</span></span><span>(</span><span><span class="hljs-string">"//book[@id > 1]"</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$book</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$book</span></span><span>->title . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>
利用xpath()方法配合XPath表达式灵活定位节点。
可以通过属性数组方式访问节点属性。
XPath表达式功能强大,可支持多种筛选和路径定位。
掌握了SimpleXML和XPath的结合使用,能够让PHP开发者高效处理各种XML数据,提升程序的灵活性和可维护性。