我有很多这样的XML文件:
File1.xml:
<Document xmlns="Forward">
<Id>123456789</Id>
</Document>
File2.xml:
<Document xmlns="Forward">
<Id>4568844</Id>
</Document>
我想将这些文件连接起来并在命名空间中添加前缀:
输出:
<?xml version="1.0" encoding="UTF-8"?>
<mes:Fichier xmlns:mes="message">
<mes:Rcvr>RECEIVE</mes:Rcvr>
<doc:Document xmlns:doc="Forward">
<doc:Id>123456789</doc:Id>
</doc:Document>
<doc:Document xmlns:doc="Forward">
<doc:Id>4568844</doc:Id>
</doc:Document>
</mes:Fichier>
我的XLS:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:mes="message" >
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:param name="Rcvr"/>
<xsl:param name="fileList"/>
<xsl:template match="/">
<xsl:copy>
<mes:Fichier xmlns:mes="message" >
<mes:Rcvr><xsl:value-of select="$Rcvr"/></mes:Rcvr>
<xsl:apply-templates select="@*|node()" />
</mes:Fichier>
</xsl:copy>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
所以你有两个任务,读取一堆文件并转换它们。假设Saxon 9作为您的XSLT处理器,您可以替换
<xsl:template match="/">
<xsl:copy>
<mes:Fichier xmlns:mes="message" >
<mes:Rcvr><xsl:value-of select="$Rcvr"/></mes:Rcvr>
<xsl:apply-templates select="@*|node()" />
</mes:Fichier>
</xsl:copy>
</xsl:template>
与
<xsl:template match="/">
<mes:Fichier xmlns:mes="message" >
<mes:Rcvr><xsl:value-of select="$Rcvr"/></mes:Rcvr>
<xsl:apply-templates select="collection('.?select=file*.xml')/node()" />
</mes:Fichier>
</xsl:template>
读入并处理名为file*.xml
的所有文件。
然后为了你的转换,你想要添加例如。
<xsl:template match="*">
<xsl:element name="doc:{local-name()}" namespace="Forward">
<xsl:apply-templates select="@* | node()"/>
</xsl:element>
</xsl:template>
如果涉及更多名称空间,您可能需要将该匹配限制为要添加前缀的名称空间。将新根元素的名称空间声明移动到样式表的根元素是有意义的。