我使用xslt将两个xml文件一起添加,然后这个结果xml文件应该符合架构。我能够将两个xml文件一起添加,但结果应该是noNamespaceSchemaLocation =“file:///osba.xsd”在根元素中添加一个属性。
这是我的.xsl文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" />
<xsl:variable name="with" select="'reception.xml'" />
<xsl:template match="@*|node()" >
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="bd">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
<xsl:variable name="info" select="document($with)/reception/bd[title=current()/title]/." />
<xsl:for-each select="$info/*">
<xsl:if test="name()!='title'">
<xsl:copy-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:transform>
我想添加类似的内容:
<xsl:template match="/*" >
<xsl:attribute name="noNamespaceSchemaLocation"><![CDATA[file:///I:/IMY%20Project/XML%20Files/osba.xsd]]></xsl:attribute>
<xsl:apply-templates/>
如果当前元素是root,我还没有找到任何匹配的方法,我也想在第一个xsl:template中放一个xsl:if test =“root”类型的交易。
感谢您的帮助
答案 0 :(得分:1)
这样的事情:
<xsl:template match="/*"> <xsl:element name="{local-name(.)}" namespace="{namespace-uri(.)}"> <xsl:copy-of select="@*"/> <xsl:attribute name="noNamespaceSchemaLocation" namespace="http://www.w3.org/2001/XMLSchema-instance">your-value</xsl:attribute> <xsl:apply-templates/> </xsl:element> </xsl:template>