【问题标题】:Simple XML Xpath Query Issues简单的 XML Xpath 查询问题
【发布时间】:2011-10-15 22:41:43
【问题描述】:

在 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"]" 给了我无效的表达式错误。

感谢您提供的任何帮助,谢谢!

【问题讨论】:

    标签: php xml xpath simplexml


    【解决方案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 的同时获得乐趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-31
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多