我是xml,xslt的新手,我有两个xml文件。我想比较两个文件并显示第一个文件中存在的记录而不是第二个文件中的记录。
第一个xml:
<employees>
<employee>
<id>1</id>
<name>aaa</name>
</employee>
<employee>
<id>2</id>
<name>bbb</name>
</employee>
<employee>
<id>3</id>
<name>ccc</name>
</employee>
<employee>
<id>4</id>
<name>ddd</name>
</employee>
</employees>
第二个xml:
<developers>
<developer>
<id>1</id>
<name>aaa</name>
</developer>
<developer>
<id>3</id>
<name>ccc</name>
</developer>
</developers>
我的XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="updates" select="document('file:///D:/vishal/Talend_vishal/Examples/14-10- 2015/HMergeAssignment/XML_mog_identiteit.xml')" />
<xsl:variable name="updateItems" select="$updates/developers/developer" />
<xsl:template match="/employees/employee">
<xsl:apply-templates select="id"/>
</xsl:template>
<xsl:template match="/employees">
<refid><xsl:apply-templates select="employee[not(id = $updateItems/id)]"/>
</refid>
</xsl:template>
</xsl:stylesheet>
我的输出:
<refid>24</refid>
必需的输出:
<refid>2</refid>
<refid>4</refid>
答案 0 :(得分:0)
您已将refid
元素的创建放在错误的位置。您已将其放在与employees
匹配的模板中,其中XML中只有一个此类元素。你应该把它放在匹配employee
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="updates" select="document('file:///D:/vishal/Talend_vishal/Examples/14-10- 2015/HMergeAssignment/XML_mog_identiteit.xml')" />
<xsl:variable name="updateItems" select="$updates/developers/developer" />
<xsl:template match="/employees/employee">
<refid>
<xsl:apply-templates select="id"/>
</refid>
</xsl:template>
<xsl:template match="/employees">
<refids>
<xsl:apply-templates select="employee[not(id = $updateItems/id)]"/>
</refids>
</xsl:template>
</xsl:stylesheet>
注意,我在refids
模板中创建了一个employees
元素,只是为了让XSLT输出结构良好的XML。