Объедините несколько URL-адресов XML в один файл XML с помощью PHP + XSLT - PullRequest
2 голосов
/ 14 марта 2012

Я пытаюсь объединить несколько небольших файлов XML в один большой XML.

Я провел некоторый поиск и пытаюсь использовать PHP / XML / XSL, но, похоже, не могу понять, как это правильно.

Я использую:

<?php

// Load the XML source
$xml = new DOMDocument;
$xml->load('collection.xml');

$xsl = new DOMDocument;
$xsl->load('vp.xsl');

// Configure the transformer
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); // attach the xsl rules

echo $proc->transformToXML($xml);

?>

А вот файл XSL, который я использую:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>

<xsl:param name="pdoc1Url" select="'http://www.domainname.com/pages/google-feed?page=1.xml'"/>
<xsl:param name="pdoc2Url" select="'http://www.domainname.com/pages/google-feed?page=2.xml'"/> 
<xsl:param name="pdoc3Url" select="'http://www.domainname.com/pages/google-feed?page=3.xml'"/>
<xsl:template match="/">

<documents>
<xsl:copy-of select="document($pdoc1Url)"/>
<xsl:copy-of select="document($pdoc2Url)"/>
<xsl:copy-of select="document($pdoc3Url)"/>
</documents>
</xsl:template>
</xsl:stylesheet>

Однако когда я запускаю скрипт, ничего не объединяется? Я знаю, что делаю что-то не так, но не могу понять, что именно. Я думаю, что я неправильно использую PHP XSLT Processor.

Как лучше всего объединить XML-документы из нескольких URL-адресов в 1 xml? Все они имеют одинаковое форматирование. В идеале я хотел бы иметь возможность просматривать комбинированный XML с URL.

Данные, которые я пытаюсь объединить, похожи на эти два URL, например: http://www.domainname.com/pages/google-feed?page=1.xml http://www.domainname.com/pages/google-feed?page=2.xml

1 Ответ

0 голосов
/ 14 марта 2012

Мне удалось выполнить ваше преобразование с использованием Saxon 6.5.4.Преобразование заняло более 14 секунд на быстром компьютере с 12 ГБ ОЗУ.Было создано 108209 строк (и поэтому я не размещаю вывод здесь ... :)).

В http://www.vitaminpartners.com/pages/google-feed?page=1.xml есть ошибка, но Saxon восстановился после этой ошибки.Вполне вероятно, что процессор XSLT, который вы используете, не восстанавливается после этой ошибки, или компьютеру, на котором вы используете, не хватает памяти.

Вот сообщения от Saxon :

SAXON 6.5.4 from Michael Kay
Java version 1.6.0_31
Preparation time: 90 milliseconds
Processing file:/(Untitled)
Building tree for file:/(Untitled) using class com.icl.saxon.tinytree.TinyBuilder
Tree built in 6 milliseconds
Building tree for http://www.vitaminpartners.com/pages/google-feed?page=1.xml using class com.icl.saxon.tinytree.TinyBuilder
Error on line 28088 column 21 of http://www.vitaminpartners.com/pages/google-feed?page=1.xml:
  Error reported by XML parser: unexpected character after entity reference (found "<") (expected ";")
Recoverable error
org.xml.sax.SAXParseException: unexpected character after entity reference (found "<") (expected ";")
Building tree for http://www.vitaminpartners.com/pages/google-feed?page=2.xml using class com.icl.saxon.tinytree.TinyBuilder
Tree built in 6936 milliseconds
Building tree for http://www.vitaminpartners.com/pages/google-feed?page=3.xml using class com.icl.saxon.tinytree.TinyBuilder
Tree built in 4350 milliseconds
Execution time: 14845 milliseconds
Press any key to continue . . . 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...