我有以下XML文件,如何在XSLT中调用perl
脚本。因为我想更新每个entry
的ID。例如<entry id="5">
和下一个条目应该是<entry id="10">
。
我的XML是:
<feed>
<author>
<firstName>f</firstName>
<lastName>l</lastName>
</author>
<date>2011-01-02 </date>
<entry>
<id>1</id>
<Name>aaa</Name>
<Content>XXX</Content>
</entry>
<entry>
<id>2</id>
<Name>bbb</Name>
<Content>YYY</Content>
</entry>
</feed>
我的XSLT是:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="updateItems" select="feed/entry" />
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="feed">
<xsl:copy>
<xsl:apply-templates select="@* | node()[not(self::entry)] | entry[not(id = $updateItems/id)]" />
<xsl:apply-templates select="$updateItems" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
首先,我不认为可以调用Perl脚本来处理来自XSLT的XML数据。如果您使用Saxon(我认为您使用的是XSLT 2.0),您可以使用Java类。
但是,如果我的要求正确,则无需使用外部编程语言。据我了解,您只想通过将它们乘以5来更改您的ID。因此,我建议您这样做:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="id">
<xsl:copy><xsl:value-of select=". * 5"/></xsl:copy>
</xsl:template>
</xsl:stylesheet>
此脚本不会触及除id - 元素的文本值之外的任何内容 - 乘以5.即可。