Я пытаюсь пройти через объект xml, как это...
$xml_url = "http://somdomain.com/frieventexport.php";
$curl = curl_init();
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_URL, $xml_url );
$xml = curl_exec( $curl );
curl_close( $curl );
$document = new DOMDocument;
$document->loadXML( $xml );
var_dump($document);
//echo $document->childNodes[1];
С var_dump
я получаю это.
object(DOMDocument)#1 (34) { ["doctype"]=> NULL ["implementation"]=> string(22) "(object value omitted)" ["documentElement"]=> NULL ["actualEncoding"]=> NULL ["encoding"]=> NULL ["xmlEncoding"]=> NULL ["standalone"]=> bool(true) ["xmlStandalone"]=> bool(true) ["version"]=> string(3) "1.0" ["xmlVersion"]=> string(3) "1.0" ["strictErrorChecking"]=> bool(true) ["documentURI"]=> NULL ["config"]=> NULL ["formatOutput"]=> bool(false) ["validateOnParse"]=> bool(false) ["resolveExternals"]=> bool(false) ["preserveWhiteSpace"]=> bool(true) ["recover"]=> bool(false) ["substituteEntities"]=> bool(false) ["nodeName"]=> string(9) "#document" ["nodeValue"]=> NULL ["nodeType"]=> int(9) ["parentNode"]=> NULL ["childNodes"]=> string(22) "(object value omitted)" ["firstChild"]=> NULL ["lastChild"]=> NULL ["previousSibling"]=> NULL ["attributes"]=> NULL ["ownerDocument"]=> NULL ["namespaceURI"]=> NULL ["prefix"]=> string(0) "" ["localName"]=> NULL ["baseURI"]=> NULL ["textContent"]=> string(0) "" }
кто-нибудь знает, как извлечь информацию из этого и использовать отдельные xml-элементы?
это будет в xml:
<event>
<titel>Eventtitle</titel>
<datum>07.03.2015</datum>
<von>18:30</von>
<bis>23:00</bis>
<ort>Something</ort>
<referent>BezRKdo</referent>
<veranstalter>Who does it.</veranstalter>
</event>
Я не знаю, как пройти через этот дамп и извлечь информацию. С уважением, Мэтт
<?php
$xml_url = "http://localhost/site.xml";
$curl = curl_init();
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $curl, CURLOPT_URL, $xml_url );
$xml = curl_exec( $curl );
curl_close( $curl );
$xml = iconv('UTF-8', 'UTF-8//IGNORE', $xml);
$document = new DOMDocument;
$document->loadXML( $xml );
$events = $document->getElementsByTagName("event");
foreach( $events as $event ){
$titels = $event->getElementsByTagName( "titel" );
$titel= $titels->item(0)->nodeValue;
$datums = $event->getElementsByTagName( "datum" );
$datum = $datums->item(0)->nodeValue;
echo $titel;
}
?>
У вас есть только одна запись в XML, каждый элемент данных уникален. Вы можете использовать XPath для извлечения данных в виде строк.
$dom = new DOMDocument();
$dom->loadXml($xml);
$xpath = new DOMXPath($dom);
echo $xpath->evaluate('string(/event/titel)'), "\n";
echo $xpath->evaluate('string(/event/datum)'), ' ';
echo $xpath->evaluate('string(/event/von)'), '-';
echo $xpath->evaluate('string(/event/bis)');
Вывод:
Übung Einhausung Amras
07.03.2015 18:30-23:00
Если ваш XML будет возвращать несколько событий, вам нужно будет зацикливать элементы события и использовать узел как контекст:
Структура XML для нескольких элементов:
<events>
<event>
<titel>Übung Einhausung Amras</titel>
...
</event>
<event>
<titel>Other event</titel>
...
</event>
...
</events>
PHP, повторяющий несколько записей в XML:
foreach($xpath->evaluate('/events/event' as $event) {
echo $xpath->evaluate('string(/event/titel)', $event), "\n";
// ...
}
В декларации XML в ответе отсутствует кодировка. Это <?xml version="1.0"?>
, Но это должно быть что-то вроде <?xml version="1.0" encoding="ISO-8859-1"?>
.
DOMDocument по умолчанию использует UTF-8. Вы можете преобразовать строку или убедиться, что XML определяет кодировку.
$xml = iconv('ISO-8859-1', 'UTF-8//IGNORE', $xml);
Из-за используемой кодировки utf8_encode() также должен работать:
$xml = utf8_encode($xml);
$xml
вами переменная$xml
не существует таким образом. Смотрите мой вывод var_dump (). Если яecho $titel
внутри цикла foreach, я не получаю вывод.$events = $document->getElementsByTagName("event"); var_dump($events);
вне цикла я получаю этотobject(DOMNodeList)#2 (1) { ["length"]=> int(0) }