我的目标是将多个文件的名称传递到 XSLT 中并使用document($myFile)
。我试图使用 saxon 引擎在命令行上传递参数,但它不断抛出错误。
我知道我可以写出一个清单文件,对其进行处理,然后在完成后将其删除。但这似乎需要大量额外工作,可能会进一步减慢速度。
当参数像这样硬编码时,XSLT 就会起作用......
<xsl:param name="PnewArticles" as="element()*">
<file-name>XMLFile.XML</file-name>
<file-name>XMLFile2.XML</file-name>
</xsl:param>
从命令行分配如下所示:
XSLT -s:Source.XML -o:outfileTest.xml -xsl:"test.xsl" newArticles='<file-name>XMLFile.XML</file-name>'
<!-- xslt param changed to this: -->
<xsl:param name="newArticles"/>
但是,它似乎将其读取为字符串值。打印出来后看起来像这样(当然,这是失败的):
'<file-name>XMLFile.XML</file-name>'
我在命令行上尝试了各种引号组合(单/双),但无济于事。还尝试添加as="element()*"
与硬编码示例一样 - 但随后它强烈抱怨......
XPTY0004: Required item type of value of variable $newArticles is node(); suplied value has item type xs:untypedAtomic
有任何想法吗?好像是这样的should有可能。
示例文件
XSLT
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:oasis="//OASIS//DTD XML Exchange Table Model 19990315//EN"
xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="mml oasis dc content xsi">
<xsl:output method="xml" encoding="utf8"/>
<xsl:param name="newArticles"/>
<!-- When these are used they work -- the extra letter in front is just to silence -->
<xsl:param name="PnewArticles" as="element()*">
<file-name>XMLFile.XML</file-name>
</xsl:param>
<xsl:variable name="VnewArticles" as="element()*">
<file-name>XMLFile.XML</file-name>
</xsl:variable>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="skipDays">
<xsl:copy-of select="."/>
<myParam>
<xsl:value-of select="$newArticles"/>
</myParam>
<xsl:apply-templates select="document($newArticles)" mode="addArticle"/>
</xsl:template>
<xsl:template match="front" mode="addArticle">
<item>
<xsl:text>NEW XML, Vol. </xsl:text>
<xsl:value-of select="volume"/>
<xsl:text>, No. </xsl:text>
<xsl:value-of select="issue"/>
</item>
</xsl:template>
<xsl:template match="body" mode="addArticle"/>
</xsl:stylesheet>
源文件
<?xml version="1.0"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
<language>en-us</language>
<skipDays>
<day>Saturday</day>
<day>Sunday</day>
</skipDays>
</channel>
</rss>
XMLFile
<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE article>
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" dtd-version="2.2" xml:lang="EN" article-type="abstract">
<front>
<volume>17</volume>
<issue>1</issue>
</front>
<body>
<sec>
<title>This is my Title</title>
<p>This is a Paragraph</p>
</sec>
</body>
</article>