如何使用 XSLT 查找不匹配的行



我有两个大的xml文件,其中一个具有以下格式:

<Persons>
<Person>
<ID>1</ID>
<LAST_NAME>London</LAST_NAME>
</Person>
<Person>
<ID>2</ID>
<LAST_NAME>Twain</LAST_NAME>
</Person>
<Person>
<ID>3</ID>
<LAST_NAME>Dikkens</LAST_NAME>
</Person>
</Persons>

第二个文件具有以下格式:

<SalesPersons>
<SalesPerson>
<ID>2</ID>
<LAST_NAME>London</LAST_NAME>
</SalesPerson>
<SalesPerson>
<ID>3</ID>
<LAST_NAME>Dikkens</LAST_NAME>
</SalesPerson>
</SalesPersons>

我需要从文件 1 中找到这些记录,文件 2 中不存在这些文件。尽管我已经使用 for-each 循环完成了它,但这种方法需要花费大量时间。是否有可能使用不同的方法以某种方式使其运行得更快?

使用键有助于提高查找性能:

<xsl:key name="sales-person" match="SalesPerson" use="concat(ID, '|', LAST_NAME)"/>
<xsl:template match="/">
<xsl:for-each select="Persons/Person">
<xsl:variable name="person" select="."/>
<!-- need to change context document for key function use -->
<xsl:for-each select="$doc2">
<xsl:if test="not(key('sales-person', concat($person/ID, '|', $person/LAST_NAME)))">
<xsl:copy-of select="$person"/>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:template>

这假设您已绑定doc2作为变量或参数,例如<xsl:param name="doc2" select="document('sales-persons.xml')"/>.

相关内容

  • 没有找到相关文章

最新更新