XML和PHP打印细节


XML and PHP printing out specifics

我是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();