对于在 PHP 中使用简单 XML 库完全陌生,并且一直在使用 w3 xpath 语法寻求帮助。
我有一个 xml 文件,大致如下所示:
<Xml_Configs>
<Foo_Module>
<Front_Name>a</Front_Name>
</Foo_Module>
<Bar_Module>
<Front_Name>b</Front_Name>
</Bar_Module>
<Baz_Module>
<Front_Name>c</Front_Name>
</Baz_Module>
</Xml_Configs>
我正在尝试找出哪个模块的 Front_Name 为 b。现在我只是试图获取要匹配的属性,而不关心获取父级,这是我尝试过的:
$xmlObj->xpath('/Xml_Configs/*[@Front_Name="b"]');
但是,这对我没有任何帮助:“/Xml_Configs/*/Front_Name”确实给了我一个带有 a、b 和 c 的简单 xml 对象数组。而“/Xml_Configs/*/[@Front_Name="b"]”给了我无效的表达式错误。
感谢您提供的任何帮助,谢谢!
最佳答案
I'm trying to figure out which module has the Front_Name of b
`$xmlObj->xpath('/Xml_Configs/*[@Front_Name="b"]');` That gets me nothing
是的,因为顶级元素 Xml_Configs
的子元素都没有任何属性。
你想要:
/*/*[Front_Name = 'b']
这将选择顶部元素的所有子元素,这些元素的子元素名为 Font_Name
,其字符串值为 "b"
。
基于 XSLT 的验证:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="/*/*[Front_Name = 'b']"/>
</xsl:template>
</xsl:stylesheet>
当此转换应用于提供的 XML 文档时:
<Xml_Configs>
<Foo_Module>
<Front_Name>a</Front_Name>
</Foo_Module>
<Bar_Module>
<Front_Name>b</Front_Name>
</Bar_Module>
<Baz_Module>
<Front_Name>c</Front_Name>
</Baz_Module>
</Xml_Configs>
它将所选节点复制到输出:
<Bar_Module>
<Front_Name>b</Front_Name>
</Bar_Module>
我建议您获取the XPath Visualizer —— 该工具已帮助成千上万的开发人员在享受乐趣的同时学习 XPath。
关于php - 简单的 XML Xpath 查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781149/