我有一個這樣的 XML 檔案:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<letter n="1">
<p>test 1</p>
</letter>
<letter n="2">
<p>test 2</p>
</letter>
<letter n="3">
<p>test 3</p>
</letter>
<letter n="4">
<p>test 4</p>
</letter>
</xml>
我當前的樣式表沒有按預期作業,如下所示:
<?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 name="xml" method="xml" indent="yes"/>
<!-- directory of new files -->
<xsl:param name="dir">/ex/ex/ex/test</xsl:param>
<!-- new file name = count existing xml files in directory and increment the value by 1 -->
<xsl:param name="filename"
select="count(collection('/ex/ex/ex/test?select=*.xml')) 1"/>
<!-- output xml file for each letter-tag -->
<xsl:template match="letter">
<xsl:for-each-group select="." group-by="./@n">
<xsl:for-each select="current-group()">
<xsl:result-document format="xml" href="{$dir}/{$filename}.xml">
<xsl:copy-of select="./node()"/>
</xsl:result-document>
</xsl:for-each>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
我想要做的:讀取要轉換的 XML 檔案,找到所有字母標簽,并為每個字母標簽創建一個新的 XML 檔案。(在此示例中,所需的輸出將是 4 個新的 XML 檔案,第一個帶有<p>test 1</p>,第二個帶有<p>test 2</p>等。)檔案名應該是輸出目錄中現有 XML 檔案的數量 1。因此,如果我的輸出目錄中已經有 10 個檔案,我希望將新檔案命名為 11.xml、12.xml 等。這是行不通的。
我的問題是我收到錯誤訊息“不能將多個結果檔案寫入同一個 URI”。
我想知道:如何調整我的樣式表以獲得我想要的結果,即我可以做些什么來輸出多個帶有遞增引數/變數作為檔案名的 XML 檔案?
uj5u.com熱心網友回復:
如果我正確閱讀了您的要求,您想要這樣做:
XSLT 2.0
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="dir">/ex/ex/ex/test</xsl:param>
<xsl:variable name="n" select="count(collection(concat($dir, '?select=*.xml')))"/>
<xsl:template match="/xml">
<xsl:for-each select="letter">
<xsl:result-document href="{$dir}/{$n position()}.xml">
<xsl:copy-of select="p"/>
</xsl:result-document>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/478389.html
上一篇:如何僅提取此xml元素中的子標簽
