全新使用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“]”给了我无效的表达错误。
感谢您提供的任何帮助,谢谢!
答案 0 :(得分:1)
我正在试图找出哪个模块的Front_Name为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。