XSLT, добавить атрибут в корневой узел результирующего файла XML - PullRequest
1 голос
/ 29 мая 2011

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

Вот мой файл .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 Ответ

1 голос
/ 29 мая 2011

Примерно так:

    <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>
...