我是XML的新手,我决定尝试用它来实现一个简单的CMS,而不是构建一个完整的MySQL数据库。然而,我卡住了如何在网页上打印出来的东西。在所有教程中,我都看到它们循环遍历每个XML元素并打印出每个元素,我只想打印出页面名称= home或页面名称= mypage的元素。
这是简单地完成在MySQL与WHERE页["home"],但我找不到相同的代码使用XML是什么。
<?xml version="1.0" encoding="utf-8"?>
<content>
<page name = "home"><br />
<title>Home</title><br />
<subtitle>a test of my testing</subtitle><br />
<top-papa>blah blah top para</top-papa><br />
<mid-para>blah blah mid para</mid-para><br />
<bot-para>blah blah bot para</bot-para><br />
<image>
<imge>mememem</imge><br />
</image>
</page>
<page name = "whatdowedo"><br />
<title>What do we do?</title><br />
<subtitle>a test of my testing</subtitle><br />
<top-papa>blah blah top para</top-papa><br />
<mid-para>blah blah mid para</mid-para><br />
<bot-para>blah blah bot para</bot-para><br />
<image>
<imge>mememem</imge><br />
</image>
</page>
</content>
非常感谢所有的回复。本 您可以在XML文档上使用XPath查询。
例如,如果XML是一个字符串:
$str = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<content>
...
</content>
XML;
并使用simplexml_load_strin()
:
$xml = simplexml_load_string($str);
然后可以使用SimpleXMLElement::xpath()
方法对该XML文档执行XPath查询——例如,通过name
属性的值进行搜索:
$nodes = $xml->xpath('//page[@name="home"]');
if (count($nodes) > 0) {
echo (string)$nodes[0]->title;
}
在本例中,您将得到以下输出:
Home
注意:同样的事情,当然,对于 DOMDocument
和 DOMXpath
也是可能的。
像这样检索页面主页的XML:
Home:
<page name="home"><br/>
<title>Home</title><br/>
<subtitle>a test of my testing</subtitle><br/>
<top-papa>blah blah top para</top-papa><br/>
<mid-para>blah blah mid para</mid-para><br/>
<bot-para>blah blah bot para</bot-para><br/>
<image>
<imge>mememem</imge><br/>
</image>
</page>
你可以用simplexml很快地完成(Demo):
$xml = simplexml_load_string($str);
$name = 'home';
$xpath = sprintf("/content/page[@name='%s'][1]", $name);
$page = $xml->xpath($xpath);
if (!$page) {
throw new Exception(sprintf('Page "%s" not found.', $name));
}
list($page) = $page;
echo $page->title, ":'n";
echo $page->asXML();