PHP XML Ayrıştırıcı - görmezden iç içe geçmiş / çocuk etiketler

4 Cevap php

Ben php :/ / input veri ayıklamak için bir XML ayrıştırıcı kullanarak olduğum bir durum var.

Gibi görünüyor gönderilen veriler:

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

Şimdi, mesele olduğunu işleyicisi, çünkü:

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

Bana yararlı hale getirmek için içeriğini deşifre için ... etiketler yorumluyor ... O <data> yani ben o çocuk / iç içe göz ardı almak nasıl bulmak gerek içinde bir şey eksik görünüyor elemanları / etiketleri ve sadece ne olursa olsun verileri bosh.

4 Cevap

WideDonkey, yerine DOM kullanarak kabul var? Kolayca yapabilirsiniz:

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

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

Ne yapıyor sona erdi yapmak SimpleXML kullanarak oldu: -

$xml = new SimpleXMLElement($input);

$whatIwant = $xml->bar->monkeys

Eğer test gibi istediğiniz kadar pek çok düzeyde aşağı gidebilir

$ Xml sarıcı etiketi dışarı uzak olduğunu.

phpQuery Sana bir PHP kabuk sarılmış jQuery Sellektör tüm güç verir.

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

Ben doğru soruyu anladım emin değilim, ama

<?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);

baskılar

foobarzebrasmonkeys