我有一个XML,看起来像这样:
$data = '<search-params>
<date>2013-05-20</date>
</search-params>
<results>
<date>2013-05-21 14:31:00</date>
<prices>
<for>
<players>1</players>
</for>
<amount>20</amount>
</prices>
<prices>
<for>
<players>2</players>
</for>
<amount>35</amount>
</prices>
<prices>
<for>
<players>3</players>
</for>
<amount>49.5</amount>
</prices>
<prices>
<for>
<players>4</players>
</for>
<amount>60</amount>
</prices>
</results>
<results>
<date>2013-05-21T14:40:00</date>
<prices>
<for>
<players>1</players>
</for>
<amount>20</amount>
</prices>
</results>';
现在,我要做的是根据规则去掉其中的一些
因此,如果<players>
的子节点为4,它应该只返回具有该值的<results>
节点。
这在PHP中是可能的吗?
我可以使用simplexml_load_string($data)
加载。问题是如何找到信息并删除节点。
谢谢
没人接,所以我来接。请阅读评论。
// First, your XML must be wraped with some root tag.
$data = '<root>
<search-params>
<date>2013-05-20</date>
</search-params>
<results>
<date>2013-05-21 14:31:00</date>
<prices>
<for>
<players>1</players>
</for>
<amount>20</amount>
</prices>
<prices>
<for>
<players>2</players>
</for>
<amount>35</amount>
</prices>
<prices>
<for>
<players>3</players>
</for>
<amount>49.5</amount>
</prices>
<prices>
<for>
<players>4</players>
</for>
<amount>60</amount>
</prices>
</results>
<results>
<date>2013-05-21T14:40:00</date>
<prices>
<for>
<players>1</players>
</for>
<amount>20</amount>
</prices>
</results>
</root>';
// Instancing the SimpleXMLElement within the XML(obviously)
$xml = new SimpleXMLElement($data);
// XPath
$xpath = $xml->xpath("results[prices/for[contains(players,'4')]]");
/**
* eXplained XPath:
* <results> that
* <prices>/<for>
* contains <players> that content is equal 4
*/
foreach($xpath as $node){
// just for fun echoes the <results> node
echo $node->asXml();
}