XSL объединить два xml - PullRequest
       2

XSL объединить два xml

0 голосов
/ 31 января 2020

Я пытаюсь создать xsl, который будет копировать file1, искать file2 для соответствующего узла file1 и изменять атрибут этого узла на значение file2. Я изо всех сил, чтобы получить приведенный ниже код для работы. Он правильно преобразовывает первый узел, но на втором узле он использует ранее найденный атрибут.

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/> 

<xsl:param name="fileName" select="'file2'" />

<xsl:template match="@* | node()">
<xsl:copy>
  <xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>

<xsl:template match="stylesheet/variable"> 
<xsl:for-each select="."> 
    <xsl:copy>
        <xsl:apply-templates select="@*" />
        <xsl:if test="document($fileName)/stylesheet/variable[@name = @name]">
            <xsl:attribute name="value">
                <xsl:value-of select="document($fileName)/stylesheet/variable[@name = @name]/@select"/>
            </xsl:attribute>    
        </xsl:if>
    </xsl:copy>
    </xsl:for-each>
    </xsl:template>

    </xsl:stylesheet>

Вот файл xml, который я пытаюсь объединить в один файл

<!--File1 xml -->
<stylesheet>
<variable name="Test" />
<variable name="Test2" select="'yy'"/>
<variable name="Test3" select="'xx'"/>
</sytlesheet>

<!--File2 xml -->
<stylesheet>
<variable name="Test" select="'x'" />
<variable name="Test2" select="'y'" />
</sytlesheet>

Есть идеи, где я иду не так?

1 Ответ

2 голосов
/ 31 января 2020

variable[@name = @name] не то, что вы хотите, вы хотите variable[@name = current()/@name]. Использование <xsl:for-each select="."> является излишним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...