2017-06-19 1 views
-1

J'ai écrit du code pour vérifier si Document_Name__c de merge1.xml n'existe pas dans Document_Name__c à partir de merge2.xml alors j'ai besoin de toutes les données dans ce cas uniquement à partir de merge1 selon la sortie attendue. XSL:Dans XSL, vérifiez si le nom de fichier n'existe pas dans un autre fichier ne fonctionne pas?

<?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> 

Entrée: Merge1.xml --- XSL, je me sers d'ici.

<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 --- en XSL, j'utilise d'ici.

<?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> 

Sortie prévue:

<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> 
+0

Ne nous dites pas qu'il ne fonctionne pas, dites-nous comment elle échoue. Quel résultat obtenez-vous? –

+0

J'ai corrigé la mise en forme de merge1.xml et la sortie attendue, mais essayer de faire la même chose sur merge2.xml révèle que le fichier n'est pas bien formé en XML. Il est donc impossible de vous aider puisque les données que vous avez fournies sont clairement incorrectes. –

+0

Maintenant, les données sont bien forme – NL1

Répondre

0

Je pense qu'il est un défaut de base dans votre logique. Vous voulez tester si D2 ne contient pas un élément égal à X, mais vous êtes en train de tester si D2 contient un élément qui n'est pas égal à X. Ce sont des conditions différentes. Vous voulez

test="!exists(X=Y)" 

pas

test="exists(X!=Y)" 
+0

J'ai essayé les deux mais n'a pas fonctionné. Pouvez-vous s'il vous plaît fournir le code xsl si possible? – NL1

+0

Non, je suis heureux de vous aider à trouver les erreurs dans votre code, mais je ne fournis pas un service de codage gratuit. –

+0

Merci qui a fonctionné avec test = "! Existe (X = Y)" – NL1