我是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>
非常感谢所有回复。 本
答案 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
注意:当然,DOMDocument
和DOMXpath
也可以使用相同类型的内容。
答案 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>
$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();