用于下载 XML 并使用 XPath 生成新脚本的脚本

Script for downloading XML and generating new one with XPath

我有一个 xml 文件,电子商务平台每隔几个小时更新一次。我想用 xpath 过滤器生成一个单独的 xml 文件。

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 只需要来自 "category2" 的产品以及产品的完整结构。我发现这是手动制作的:

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

平台每隔几个小时更新一次新产品文件。所以我想要下载这个文件的脚本,自动生成新的 xml 只有 category2.

简单地使用专用语言XSLT,旨在将XML 文件转换为运行 需要的XPath 表达式。具体调用身份转换以按原样复制整个文档,并删除所有其他不符合空模板条件的节点。

几乎所有现代编程语言(Java、C#、Python、PHP、Perl、R、VB,甚至 Bash 和 PowerShell)一些软件(Excel、SAS 等)通常通过 XML 库或模块维护对 XSLT 1.0 的支持。此外,专用处理器可以 运行 您的 XSLT 脚本,包括 Saxon、Xalan、xsltproc。有关详细信息,请参阅 tag page

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>

Online Demo


几个 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");