Скрипт для загрузки XML и генерации нового с XPath - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть XML-файл, который обновляется каждые несколько часов платформой электронной коммерции.Я хотел бы создать отдельный файл XML с фильтром xpath.

Код XPath - одна строка.

Какой язык мне использовать для создания этого xml?Где я могу найти какой-нибудь шаблон, чтобы он работал?

Хорошо, я получил этот XML-файл:

 <o id="17" url="url" price="15.00" avail="1" weight="0" stock="3" set="0" 
 basket="0">
 <cat><![CDATA[ category ]]></cat>
 <name><![CDATA[ name ]]></name>
 <imgs><main url="url"/></imgs>
 <desc><![CDATA[description]]></desc>
 <attrs><a name="text"><![CDATA[ Dev ]]></a>
 <a name="Code"><![CDATA[ ]]></a>
 <a name="EAN"><![CDATA[ EAN ]]></a>
 </attrs>

 <o id="18" url="url" price="15.00" avail="1" weight="0" stock="3" set="0" 
 basket="0">
 <cat><![CDATA[ category2 ]]></cat>
 <name><![CDATA[ name ]]></name>
 <imgs><main url="url"/></imgs>
 <desc><![CDATA[description]]></desc>
 <attrs><a name="text"><![CDATA[ Dev ]]></a>
 <a name="Code"><![CDATA[ ]]></a>
 <a name="EAN"><![CDATA[ EAN ]]></a>
 </attrs>

Существует много категорий продуктов, но мне нужны отдельные продукты только для XMLиз "категории2" со всей структурой продукта.Я нашел это, чтобы сделать это вручную:

//o[normalize-space(cat) = 'category2']

Файл обновления платформы каждые несколько часов с новыми продуктами.Поэтому я хотел бы иметь скрипт, который загружает этот файл, автоматически генерирует новый XML только с категорией 2.

1 Ответ

1 голос
/ 26 сентября 2019

Просто используйте специальный язык XSLT , предназначенный для преобразования файлов XML для запуска необходимого выражения XPath.В частности, вызовите преобразование идентичности, чтобы скопировать весь документ как есть и удалить все другие узлы, которые не соответствуют критериям, с пустым шаблоном.

Почти каждый современный язык программирования (Java, C #, Python, PHP, Perl, R,VB, даже Bash и PowerShell) и некоторые программы (Excel, SAS и т. Д.) Поддерживают XSLT 1.0, как правило, через библиотеку или модуль XML.Кроме того, выделенные процессоры могут запускать ваш XSLT-скрипт, включая Saxon, Xalan, xsltproc.См. страница тега для получения дополнительной информации.

XSLT (сохранить как файл .xsl, специальный файл .xml)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output indent="yes"/>
  <xsl:strip-space elements="*"/>

  <!-- IDENTITY TRANSFORM -->
  <xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>

  <!-- REMOVE NODES -->
  <xsl:template match="o[normalize-space(cat) != 'category2']"/>

</xsl:stylesheet>

Онлайн-демонстрация


Несколько примеров процессора XSLT:

Xalan командная строка (с компилятором Java)

java org.apache.xalan.xslt.Process -IN source.xml -XSL script.xsl -OUT output.xml

Saxon командные строки (с Java-компилятором)

java net.sf.saxon.Transform -s:source.xml -xsl:script.xsl -o:output.xml

java -jar dir/saxon9he.jar -s:source.xml -xsl:script.xsl -o:output.xml

xsltproc командная строка (для машин Unix)

xsltproc myScript.xsl Output.xml > myDesiredResult.xml

Powershell скрипт (для машин Windows)

$xslt = New-Object System.Xml.Xsl.XslCompiledTransform;

$xslt.Load("C:\Path\To\Script.xsl");
$xslt.Transform("C:\Path\To\Input.xml", "C:\Path\To\Output.xml");
...