xslt从外部文档复制属性

xslt从外部文档复制属性,xslt,saxon,Xslt,Saxon,我有以下xml <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.l

我有以下xml

<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                   xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd">
    <changeSet author="system (generated)" id="1538720867962-1">
      <createTable tableName="AS_JOURNALEVENTDETAILATTRMAP">
            <column name="JOURNALEVENTTYPEID" type="NUMBER(9, 0)">
                <constraints primaryKey="true" primaryKeyName="PK$AS_JOURNALEVENTDETATTRMAP"/>
            </column>
            <column name="JOURNALEVENTDETAILATTRID" type="NUMBER(9, 0)">
                <constraints primaryKey="true" primaryKeyName="PK$AS_JOURNALEVENTDETATTRMAP"/>
            </column>
            <column name="LISTORDER" type="NUMBER(9, 0)">
                <constraints nullable="false"/>
            </column>
        </createTable>
   </changeSet>
   <changeSet id="c529c6ea-45c2-4ec2-8c9d-7bc935434d21" author="system">
      <setTableRemarks remarks="this is wrong"
                       tableName="AS_JOURNALEVENTDETAILATTRMAP"/>
      <setColumnRemarks tableName="AS_JOURNALEVENTDETAILATTRMAP"
                        columnName="JOURNALEVENTTYPEID"
                        remarks="Journal event type identifier"/>
      <setColumnRemarks tableName="AS_JOURNALEVENTDETAILATTRMAP"
                        columnName="JOURNALEVENTDETAILATTRID"
                        remarks="Journal event detail attribute identifier"/>
      <setColumnRemarks tableName="AS_JOURNALEVENTDETAILATTRMAP"
                        columnName="LISTORDER"
                        remarks="Order in list"/>
   </changeSet>
</databaseChangeLog>

有人能告诉我如何正确映射外部文档中的备注吗?

我想您只需要您拥有的身份转换模板

<xsl:template match="changeSet/setTableRemarks[key('remarkTableName', @tableName, $originalChangeLog)]/@remarks">
  <xsl:attribute name="{name()}" select="key('remarkTableName', ../@tableName, $originalChangeLog)/@remarks"/>
</xsl:template>
这里有一个在线示例,第二个XML作为一个自足示例的变量内联,但是如果您保留您的示例,它也可以工作

<xsl:template match="changeSet/setTableRemarks[key('remarkTableName', @tableName, $originalChangeLog)]/@remarks">
  <xsl:attribute name="{name()}" select="key('remarkTableName', ../@tableName, $originalChangeLog)/@remarks"/>
</xsl:template>