Разбор XML с Xpath в PHP - PullRequest
       3

Разбор XML с Xpath в PHP

1 голос
/ 02 сентября 2010

Рассмотрим следующий код:

$dom = new DOMDocument();
$dom->loadXML($file);

$xmlPath = new DOMXPath($dom);
$arrNodes = $xmlPath->query('*/item');
foreach($arrNodes as $item){
//missing code
}

Файл $ представляет собой xml, и каждый элемент имеет заголовок и описание.Как я могу их отобразить (название и описание)?

$file = "<item>
   <title>test_title</title>
   <desc>test</desc>
</item>";

Ответы [ 3 ]

6 голосов
/ 02 сентября 2010

Я предлагаю использовать php simplexml, при этом вы по-прежнему получаете xpath функциональность, но при более простом подходе, например, вы получите доступ к таким атрибутам:

$name = $item['name'];

Вот пример:

XMLFile.xml:

<?xml version="1.0" encoding="UTF-8"?>
<xml>
    <items>
        <item title="Hello World" description="Hellowing the world.." />
        <item title="Hello People" description="greeting people.." />
    </items>
</xml>

do.php:

<?php
$xml_str = file_get_contents('xmlfile.xml');
$xml = new SimpleXMLElement($xml_str);
$items = $xml->xpath('*/item');

foreach($items as $item) {
    echo $item['title'], ': ', $item['description'], "\n";
}
3 голосов
/ 02 сентября 2010

Если ваш товар выглядит так:

<item>
    <title>foo</title>
    <description>frob</description>    
</item>

Вы можете использовать getElementsByTagName() и nodeValue:

foreach($arrNodes as $item){
    print $item->getElementsByTagName('title')->item(0)->nodeValue;
}

Являются ли title и description атрибутами?Напримервыглядит ли элемент следующим образом:

<item title="foo" description="frob" />

Если это так, вы можете просто использовать getAttribute():

...
foreach($arrNodes as $item){
    print $item->getAttribute('title');
}
0 голосов
/ 02 сентября 2010

Правильное выражение XPath должно быть:

/*/item/title | /*/item/desc

Или

/*/item/*[self::title or self::desc]

Это оценка узла, установленного с помощью элементов title и desc в порядке документов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...