我可以使用以下方法显示xml中的所有元素:
foreach($xml->children() as $child)
{
echo $child->title;
}
?>
但是,我怎么会显示这本书的“作者”谁的头衔是“帽子里的猫”?也就是说,如何获得具有特定属性的孩子的对象?
谢谢,
大卫
答案 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;
}
?>
谢谢, 大卫