在XSL中检查文件名是否存在于另一个文件中是不行的?

时间:2017-06-19 09:23:49

标签: xml xslt xslt-2.0

我已经编写了代码来检查merge1.xml中的Document_Name__c是否存在于merge2.xml中的Document_Name__c中,然后我需要所有数据,仅根据预期的输出来自merge1。 XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="xml" indent="yes"/>
<xsl:param name="XMLMerge2" select="document('merge2.xml')"/>
<xsl:template match="objects">
    <objects>
        <xsl:for-each select="Alert__c">
            <xsl:variable name="Email_from_merge1" select="Document_Name__c"/>
            <xsl:if
                test="
                    exists($XMLMerge2/objects/Data__c[Document_Name__c
                    != $Email_from_merge1])">
                <xsl:copy>
                    <xsl:apply-templates select="@* | node()"/>
                </xsl:copy>
            </xsl:if>
        </xsl:for-each>
    </objects>
</xsl:template>
<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

输入:Merge1.xml ---在XSL中,我在这里使用。

<objects>
    <Alert__c>
        <Document_Name__c>aaa.pdf</Document_Name__c>
        <CreatedDate>2017-06-19T10:55:56.000Z</CreatedDate>
    </Alert__c>
    <Alert__c>
        <Document_Name__c>file 1.pdf</Document_Name__c>
        <CreatedDate>2017-06-15T10:55:56.000Z</CreatedDate>
    </Alert__c>
    <Alert__c>
        <Document_Name__c>VICS_810_004010_US.pdf</Document_Name__c>
        <CreatedDate>2017-06-09T06:24:56.000Z</CreatedDate>
    </Alert__c>    
    <Alert__c>
        <Document_Name__c>aa.csv</Document_Name__c>
        <CreatedDate>2017-06-14T14:26:49.000Z</CreatedDate>
    </Alert__c>   
</objects>

Merge2.xml ---在XSL中,我在这里使用。

<?xml version="1.0" encoding="UTF-8"?>
<objects>
<Data__c>
<Id>a0J3900000KNEqTEAX</Id>
<Document_Name__c>VICS_810_004010_US.pdf</Document_Name__c>
</Data__c>

<Data__c>
<Id>a0J3900000KNEqVEAX</Id>
<Document_Name__c>file 1.pdf</Document_Name__c>
</Data__c>
</objects>

预期产出:

<objects>
    <Alert__c>
        <Document_Name__c>aaa.pdf</Document_Name__c>
        <CreatedDate>2017-06-19T10:55:56.000Z</CreatedDate>
    </Alert__c>
    <Alert__c>
        <Document_Name__c>aa.csv</Document_Name__c>
        <CreatedDate>2017-06-14T14:26:49.000Z</CreatedDate>
    </Alert__c>
</objects>

1 个答案:

答案 0 :(得分:0)

我认为这是你逻辑上的一个基本缺陷。您想测试D2是否不包含等于X的元素,但实际上您正在测试D2是否包含不等于X的元素。这些是不同的条件。你想要

test="!exists(X=Y)"

test="exists(X!=Y)"