代码之家  ›  专栏  ›  技术社区  ›  dimo414

simpleXML:选择具有特定属性值的元素

  •  31
  • dimo414  · 技术社区  · 17 年前

    在XML文档中,我有共享相同名称的元素,但是属性的值定义了它是什么类型的数据,我希望从文档中选择所有具有特定值的元素。我是否需要使用xpath(如果需要,您是否可以建议正确的语法)或者是否有更优雅的解决方案?

    下面是一些XML示例:

    <object>
      <data type="me">myname</data>
      <data type="you">yourname</data>
      <data type="me">myothername</data>
    </object>
    

    我想选择所有 <data> 标记的子级 <object> 谁的类型是 me .

    PS—我正在尝试使用PHP与Netflix API接口—这对我来说不重要,但如果你想提出一个好的/更好的方法,我会全力以赴的。

    2 回复  |  直到 17 年前
        1
  •  45
  •   Gumbo    17 年前

    试试这个XPath:

    /object/data[@type="me"]
    

    所以:

    $myDataObjects = $simplexml->xpath('/object/data[@type="me"]');
    

    如果 object 不是文档的根,请使用 //object/data[@type="me"] 相反。

        2
  •  4
  •   willbradley    14 年前

    我只是做了一个为我做这件事的函数;但它只获取第一个结果。您的里程可能会有所不同。

    function query_attribute($xmlNode, $attr_name, $attr_value) {
      foreach($xmlNode as $node) { 
        switch($node[$attr_name]) {
          case $attr_value:
            return $node;
        }
      }
    }
    

    用途:

    echo query_attribute($MySimpleXmlNode->Customer, "type", "human")->Name;
    

    (对于下面的XML)

    <Root><Customer type="human"><Name>Sam Jones</name></Customer></Root>