PHP XML Parser - 忽略嵌套/子标记

时间:2009-05-08 10:51:11

标签: php xml parsing

我遇到的情况是我使用XML解析器从php://输入中提取数据。

发送的数据如下:

<this>foo</this>
<that>bar></that>
<data><dong>zebras</dong><fong>monkeys</fong></data>

现在,问题在于因为处理程序:

$xml_parser = xml_parser_create();

xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "contents");

$document = file_get_contents("php://input");                  

xml_parse($xml_parser, $document);

xml_parser_free($xml_parser);

...正在为我解释标签以破译内容以使其有用......似乎在<data>内缺少任何东西,即我需要找出如何让它忽略孩子/嵌套的元素/标签,只是把数据搞砸了。

4 个答案:

答案 0 :(得分:1)

WideDonkey,您是否考虑过使用DOM?你可以轻松地做到:

$dom = new DOMDocument();
$dom->loadXML(file_get_contents('php://input'));

$data = $dom->getElementsByTagName('data');
$data = $data[0]->asXML();

答案 1 :(得分:0)

我不确定我是否正确理解了这个问题,但是

<?php
function contents($parser, $data) {
  echo $data;
}

$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false);
// xml_set_element_handler($xml_parser, "startTag", "endTag");
xml_set_character_data_handler($xml_parser, "contents");
// $document = file_get_contents("php://input");
$document = '<x><this>foo</this><that>bar</that><data><dong>zebras</dong><fong>monkeys</fong></data></x>';
xml_parse($xml_parser, $document);
xml_parser_free($xml_parser);

打印

foobarzebrasmonkeys

答案 2 :(得分:0)

我最终做的是使用SimpleXML: -

$xml = new SimpleXMLElement($input);

$whatIwant = $xml->bar->monkeys

您可以根据需要调低任意级别,例如测试

$ xml是最远的包装标签。

答案 3 :(得分:0)

phpQuery为您提供了包装在PHP shell中的jQuery选择器的所有功能。

phpQuery::newDocumentFileXHTML('my-xhtml.html')->find('p');