我有这个XML文件:
<page>
<title>test</title>
<text>bla bla</text>
</page>
<page>
<title>another test</title>
<text>bla bla</text>
</page>
<page>
<title>hello</title>
<text>hello world</text>
</page>
我想解析文件(PHP SAX解析器)以查找标题为“hello”的页面,然后保存相应的Text标签内容..到目前为止我做的是:
$pages = array();
$elements = null;
function startElements($parser, $name, $attrs) {
global $wiki, $elements;
if(!empty($name)) {
$elements = $name;
}
}
function endElements($parser, $name) {
global $elements;
if(!empty($name)) {
$elements = null;
}
}
function characterData($parser, $data) {
global $pages, $elements;
if(!empty($data)) {
if ($elements == 'TITLE' ) {
if((preg_match('/Hello/', $data)==1))
{
// ... I found the page with the good title, but how to get the following text tag content!!
}
}
}
}
$parser = xml_parser_create();
xml_set_element_handler($parser, "startElements", "endElements");
xml_set_character_data_handler($parser, "characterData");
if (!($handle = fopen('tmp.xml', "r"))) {
die("could not open XML input");
}
while($data = fread($handle, 4096)) {
xml_parse($parser, $data);
}
有关如何使用特定标题标记获取Text标记内容的任何想法?我可以通过保存数组中的所有数据来获得我需要的结果..然后搜索!!但我想要一个更好的解决方案。
谢谢。答案 0 :(得分:0)
好的我找到了一个解决方案,不是像我想要的那样基于SAX解析器,但仍适用于大文件。它是通过组合SimpleXML(DOM解析器)和XMLReader(基于流的解析器)。 SimpleXML允许轻松访问子节点。
使用XMLReader,数据一次传递一个元素 扩大()。使用此方法,您可以转换XMLReader传递的节点 到DOMElement,再到SimpleXML。
可以在此处找到两者结合的详细信息:http://www.ibm.com/developerworks/library/x-xmlphp2/
我希望这有助于其他人。