php - 简单的 XML Xpath 查询问题

标签 php xml xpath simplexml

对于在 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/

相关文章:

javascript - 使用 codeigniter 搜索栏中的自动完成功能

php - 如何修复 Wordpress 博客中主题的语法错误

c# - LINQ - 从具有特定标记的 XML 元素中选择 *

xml - 简单的 Scala XML 解析

php - 如何使用 XPath 执行 WHERE 语句?

php - 从日期时间查找时区

php - 递归数组搜索

java - 如何在 Android Studio 中使用 TextView 的矩形背景?

html - 如何在 XPATH 中选择具有相同属性 ID 的第二个元素?

html - 如何使用 XSLT 编辑 XML 文件中的元素?