Как загрузить XML-файл с его комментариями, используя PHP - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь загрузить XML-файл, используя:

$xml = simplexml_load_file('https://xxxxx/xxxxx.xml');

И у XML-файла есть некоторые комментарии, которые вы можете видеть на картинке ниже, которые я хотел бы использовать в комментариях, используя данныесоздание моей таблицы:

Original XML File Comments

Но когда я попытался var_dump данных, я вижу ["comments"] как:

["comment"]=>
  array(2) {
    [0]=>
    object(SimpleXMLElement)#5 (0) {
    }
    [1]=>
    object(SimpleXMLElement)#7 (0) {
    }
  }

Вопрос в том, как я могу получить содержимое комментариев, чтобы я мог использовать имена языков, указанные в них?

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Вам нужно будет использовать DOMDocument, так как SimpleXML не подходит для комментариев.Вы можете использовать XPath для поиска комментария после (используйте normalize-space() для удаления пробелов вокруг текста) и following-sibling для возврата следующего узла.Последняя строка просто выводит найденный элемент, вам нужно будет обработать его по мере необходимости (используйте [0], так как query вернет список узлов, и вам просто нужен первый).

$doc = new DOMDocument();
$doc->load($file);
$xp = new DOMXPath($doc);

$lang = "Finland";
$langPop = $xp->query("//comment()[normalize-space(.)='$lang']/following-sibling::*[1]");

echo $doc->saveXML($langPop[0]);

С некоторыми образцами данных ...

<base>
    <!-- Finland -->
    <languagePopulation>Finland data
    </languagePopulation>
    <!-- England -->
    <languagePopulation>England data
    </languagePopulation>
</base>

даст

<languagePopulation>Finland data
    </languagePopulation>
0 голосов
/ 09 февраля 2019

Используйте file_get_contents вместо:

$xml = file_get_contents('https://xxxxx/xxxxx.xml');

Если вам нужен XML для загрузки в объект, тогда я думаю, что вы должны использовать DOMDocument () :

$dom = new DOMDocument();
$dom->load('https://xxxxx/xxxxx.xml');
$xpath = new DOMXpath($dom);
$comment = $xpath->evaluate('string(//channel/item[1]/comment())');
echo $comment;

var_dump ($ xml);// показываем комментарии

enter image description here

...