среда, 24 декабря 2014 г.

Получение XML из другого XML по маске заданной с помощью XSLT

Имеется XML файл, содержащий какую либо информацию. Но для работы с ним нужно изменить структуру файла.

Имеющийся XML:

<?xml version="1.0" encoding="UTF-8"?><Item>
   <ASIN>1234567</ASIN>
   <LargeImage>
      <URL>some_url</URL>
      <Height Units="pixels">307</Height>
      <Width Units="pixels">500</Width>
   </LargeImage>
   <ItemAttributes>
      <Binding>Category</Binding>
      <Brand>SomeBrand</Brand>
   </ItemAttributes>
</Item> 

Нам необходимо достать содержимое тега LargeImage:

Для этого воспользуемся следующей структурой XSL:

<?xml version='1.0'?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
   <xsl:template match="Item">
      <xsl:for-each select="LargeImage//*">
         <xsl:element name="{local-name(.)}">
            <xsl:value-of select="."/>
         </xsl:element>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

на выходе получаем следующий результат


<?xml version="1.0" encoding="UTF-8"?><URL>some_url</URL><Height>307</Height><Width>500</Width>


PHP код:

$xslDoc = new DOMDocument();$xslDoc->load("example.xsl");
$xmlDoc = new DOMDocument();$xmlDoc->load("item.xml");

$proc = new XSLTProcessor();$proc->importStylesheet($xslDoc);
$result = $proc->transformToXML($xmlDoc); 
 
file_put_contents('var/result-'.time().'.xml', $result);

Комментариев нет:

Отправить комментарий