我有许多这样的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>发布于 2016-08-09 16:39:23
因此,您有两个任务,读取一堆文件并转换它们。假设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>如果涉及更多的名称空间,则可能需要将匹配限制在要向其添加前缀的名称空间中。将新根元素的命名空间声明移动到样式表的根元素是有意义的。
https://stackoverflow.com/questions/38853290
复制相似问题