XML和PHP打印出细节

时间:2011-08-07 14:42:30

标签: php xml

我是XML的新手,并决定与构建整个MySQL数据库相比,我会尝试使用它来实现一个简单的CMS。但是我坚持如何在网页上打印出来。在所有教程中,我看到他们遍历每个XML元素并打印出每个元素,我只想打印出page name = home或page name = 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>

非常感谢所有回复。 本

2 个答案:

答案 0 :(得分:1)

您可以在XML文档上使用XPath queries


例如,如果您的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


注意:当然,DOMDocumentDOMXpath也可以使用相同类型的内容。

答案 1 :(得分:0)

要检索页面 home 的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>

你可以很快地使用simplexmlDemo):

$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();