【问题标题】:Selecting attribute values based on another attribute value with SimpleXML [duplicate]使用 SimpleXML 基于另一个属性值选择属性值 [重复]
【发布时间】:2013-02-20 12:12:46
【问题描述】:

我正在尝试使用 xml 文件和 SimpleXML 显示图像

XML 代码是

<icons>
  <icon size="tiny"    href="/FF02-tiny.jpg"    />
  <icon size="sidebar" href="/FF02-sidebar.jpg" />
  <icon size="full"    href="/FF02-full.jpg"    />
</icons>

我想获取size="full" 行的href 属性。

我试过了

icons->icon->attributes()->href

但这只是给了我第一个'tiny' 大小。我知道我应该使用 xpath,但我迷路了。

【问题讨论】:

    标签: php xml xpath simplexml


    【解决方案1】:

    是的,您可以使用 xpath 表达式选择属性节点:

    list($iconHref) = $xml->xpath("//icon[@size='full']/@href");
    echo $iconHref;
    

    【讨论】:

    • 感谢您的建议...我试过了,但它仍然给了我一个数组作为输出。 Boundless 的回答很有效……
    • @kaillum:我编辑了我的答案,这样它就可以工作了。即使 XML 的结构发生变化,我建议的方式也会起作用。
    【解决方案2】:

    $icons-&gt;icon 会给你一个SimpleXMLElement 对象,它可以访问$icons 对象的所有icon 子元素。

    您需要从那里选择要为其获取属性的图标。这适用于array-like 访问和零索引子元素的数值和属性的字符串值:

    // specify what icon you want (third)
    // and the attribute (href)
    $icons->icon[2]['href'];
    

    您可以在 PHP 手册中找到 SimpleXML basic examplesExample #3Example #5)的文档。

    但是,如果您要查找的元素的位置发生变化,这将不起作用。所以建议你使用more specific xpath-expression instead

    【讨论】:

    • 完美...谢谢...
    • 不客气。此外,如果您的 XML 不同,即“完整”并不总是第三个图标,您需要尝试不同的东西。
    猜你喜欢
    • 2017-01-29
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多