2011-05-29 9 views
1

Я добавляю два xml-файла вместе с помощью xslt, а затем этот результирующий XML-файл должен соответствовать схеме. Я могу добавить два файла xml вместе, но тогда результат должен иметь noNamespaceSchemaLocation = "file: ///osba.xsd" в качестве атрибута в корневом элементе.XSLT, Добавить атрибут в корневой узел результирующего xml-файла

Вот мой .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/>       

Я не нашел способ, чтобы соответствовать, если текущий элемент является корневым , Я также думал о том, чтобы положить xsl: if test = "root" тип сделки в первом шаблоне xsl:.

Спасибо за любую помощь

ответ

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>
+0

Haha Большое спасибо! Работали как шарм –

Смежные вопросы