我遇到的情况是我使用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>
内缺少任何东西,即我需要找出如何让它忽略孩子/嵌套的元素/标签,只是把数据搞砸了。
答案 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');