按属性获取xml对象

时间:2010-12-27 22:09:54

标签: php xml

我可以使用以下方法显示xml中的所有元素:     

foreach($xml->children() as $child)
  {
  echo $child->title;
  }
?>

但是,我怎么会显示这本书的“作者”谁的头衔是“帽子里的猫”?也就是说,如何获得具有特定属性的孩子的对象?

谢谢,

大卫

3 个答案:

答案 0 :(得分:1)

这可以通过XPath轻松完成。虽然不确定你想要什么。

$sxml = new SimpleXMLElement($xml_string);
$arrayOfNodes = $sxml->xpath('//child[@attr="value"]/..');
foreach ($arrayOfNodes as $node) {
   // do stuff
}

以上内容将为您提供包含具有<child>属性的attr="value"节点的所有节点。

$sxml = new SimpleXMLElement($xml_string);
$arrayOfNodes = $sxml->xpath('//parent[@attr="value"]/*');
foreach ($arrayOfNodes as $node) {
   // do stuff
}

以上内容将为<parent>节点的所有子节点提供attr="value"属性。

当然,如果你提供了XML结构,我可以使这个例子不那么通用。

答案 1 :(得分:1)

啊,这似乎做了这个工作:     

$res = $xml->xpath("/bookstore/book[title = 'Everyday Italian']"); 

echo $res[0]->author

?>

这里有一些很好的解释: http://www.w3schools.com/XPath/xpath_syntax.asp

感谢指针!

大卫

答案 2 :(得分:0)

结构是这样的:

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
  <book>
    <title>Everyday Italian</title>
    <author>Giada De Laurentiis</author>
    <year>2005</year>
    <price>30.00</price>
  </book>
  <book>
    <title>Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore>

我所知道的唯一术语是“书店”是“根节点”。您的回复中“父节点”和“子节点”之间有什么区别?

如果我想输出名为“Everyday Italian”的书的作者,它会是这样的:

<?php
$xml = simplexml_load_file("bookstore.xml");

$arrayOfNodes = $xml->xpath('//parent[@title="Everyday Italian"]/*');

foreach ($arrayOfNodes as $node) {
   echo $node->author;
}

?>

谢谢, 大卫

相关问题