2017-10-10 2 views
0

ich neeed Xslt zu tun, um diese XML in einem anderen WHERE zu transformieren: nur zeigt, wo effectiveDate nicht leer und ratingChar1 mit „WL“ ab ich wirklich ot verstehe nicht, was ich tue aber hier ist mein xslt: ich neeed xslt zu tun, um diese xML in einem anderen WHERE zu transformieren: nur zeigt, wo effectiveDate nicht leer und ratingChar1 beginnend mit „WL“ ich wirklich ot verstehe nicht, was ich tue, aber hier ist meine xslt:löschen Eltern, wenn das Kind leer

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"> 
    <xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:template match="effectiveDate[not('')]"/> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="effectiveDate[@value=''] | parent[child[@value='']]" /> 
    <xsl:template match="ratingDataModel[descendant::ratingChar1[(starts-with(.,'WL'))]]"/> 
</xsl:transform> 

Und das ist XML:

<EagleML eaglemlVersion="2-0" actualBuild="1" eaglemlType="ReferenceTransactionMessage" xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0"> 
<header> 
    <batchIdentifier> 
     <batchId>ADX_A.20121214</batchId> 
     <sequenceNumber>44</sequenceNumber> 
     <totalCount>44</totalCount> 
    </batchIdentifier> 
    <sentBy>ALLSTATE</sentBy> 
    <creationTimestamp>2012-12-14T22:33:50.816-06:00</creationTimestamp> 
</header> 
<validation validationScheme="Allstate" xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0">Allstate</validation> 
<party id="Allstate" xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0"> 
    <partyId>Allstate</partyId> 
    <partyName>Allstate Investments</partyName> 
</party> 
<referenceTransaction> 
    <header> 
     <identifier id="Allstate"> 
      <transactionId transactionIdScheme="Allstate">Allstate</transactionId> 
     </identifier> 
    </header> 
    <rating> 
     <sourceName>ALADDIN</sourceName> 
     <updateSource>ALDDNGAL</updateSource> 
     <effectiveDate>2012-12-14</effectiveDate> 
     <ratingDataModel> 
      <alphaRating>2</alphaRating> 
      <submittedBy>l5mbeatt</submittedBy> 
      <submittedDate>2012-12-14T15:57:29-06:00</submittedDate> 
      <ratingCode>RV_2</ratingCode> 
      <ratingTypeIndicator/> 
      <ratingChar1>RV_2</ratingChar1> 
     </ratingDataModel> 
    </rating> 
</referenceTransaction> 
<referenceTransaction> 
    <header> 
     <identifier id="Allstate"> 
      <transactionId transactionIdScheme="Allstate">Allstate</transactionId> 
     </identifier> 
    </header> 
    <rating> 
     <sourceName>ALADDIN</sourceName> 
     <updateSource>ALDDNGAL</updateSource> 
     <effectiveDate>2012-12-14</effectiveDate> 
     <ratingDataModel> 
      <alphaRating>45</alphaRating> 
      <submittedBy>l5mbeatt</submittedBy> 
      <submittedDate>2012-12-14T15:57:29-06:00</submittedDate> 
      <ratingCode>TH_45</ratingCode> 
      <ratingTypeIndicator/> 
      <ratingChar1>TH_45</ratingChar1> 
     </ratingDataModel> 
    </rating> 
</referenceTransaction> 
<referenceTransaction> 
    <header> 
     <identifier id="Allstate"> 
      <transactionId transactionIdScheme="Allstate">Allstate</transactionId> 
     </identifier> 
    </header> 
    <rating> 
     <sourceName>ALADDIN</sourceName> 
     <updateSource>ALDDNGAL</updateSource> 
     <effectiveDate>2012-12-14</effectiveDate> 
     <ratingDataModel> 
      <alphaRating>CONCERN</alphaRating> 
      <submittedBy>l5bprice</submittedBy> 
      <submittedDate>2012-12-14T15:43:59-06:00</submittedDate> 
      <ratingCode>WL_CONCERN</ratingCode> 
      <ratingTypeIndicator>WATCHLIST</ratingTypeIndicator> 
      <ratingChar1>WL_CONCERN</ratingChar1> 
      <ratingDate1>2012-12-14</ratingDate1> 
     </ratingDataModel> 
    </rating> 
</referenceTransaction> 
<referenceTransaction> 
    <header> 
     <identifier id="Allstate"> 
      <transactionId transactionIdScheme="Allstate">Allstate</transactionId> 
     </identifier> 
    </header> 
    <rating> 
     <sourceName>ALADDIN</sourceName> 
     <updateSource>ALDDNGAL</updateSource> 
     <effectiveDate></effectiveDate> 
     <ratingDataModel> 
      <alphaRating>CONCERN</alphaRating> 
      <submittedBy>nfallon</submittedBy> 
      <submittedDate>2012-12-14T16:05:25-06:00</submittedDate> 
      <ratingCode>WL_CONCERN</ratingCode> 
      <ratingTypeIndicator>WATCHLIST</ratingTypeIndicator> 
      <ratingChar1>WL_CONCERN</ratingChar1> 
      <ratingDate1>2012-12-14</ratingDate1> 
     </ratingDataModel> 
    </rating> 
</referenceTransaction> 
</EagleML> 

Expected XML:

<EagleML eaglemlVersion="2-0" actualBuild="1" eaglemlType="ReferenceTransactionMessage" xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0"> 
<header> 
    <batchIdentifier> 
     <batchId>ADX_A.20121214</batchId> 
     <sequenceNumber>44</sequenceNumber> 
     <totalCount>44</totalCount> 
    </batchIdentifier> 
    <sentBy>ALLSTATE</sentBy> 
    <creationTimestamp>2012-12-14T22:33:50.816-06:00</creationTimestamp> 
</header> 
<validation validationScheme="Allstate" xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0">Allstate</validation> 
<party id="Allstate" xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0"> 
    <partyId>Allstate</partyId> 
    <partyName>Allstate Investments</partyName> 
</party> 
<referenceTransaction> 
    <header> 
     <identifier id="Allstate"> 
      <transactionId transactionIdScheme="Allstate">Allstate</transactionId> 
     </identifier> 
    </header> 
    <rating> 
     <sourceName>ALADDIN</sourceName> 
     <updateSource>ALDDNGAL</updateSource> 
     <effectiveDate>2012-12-14</effectiveDate> 
     <ratingDataModel> 
      <alphaRating>CONCERN</alphaRating> 
      <submittedBy>l5bprice</submittedBy> 
      <submittedDate>2012-12-14T15:43:59-06:00</submittedDate> 
      <ratingCode>WL_CONCERN</ratingCode> 
      <ratingTypeIndicator>WATCHLIST</ratingTypeIndicator> 
      <ratingChar1>WL_CONCERN</ratingChar1> 
      <ratingDate1>2012-12-14</ratingDate1> 
     </ratingDataModel> 
    </rating> 
</referenceTransaction> 
</EagleML> 
+0

Können Sie Ihre Frage bearbeiten, um die erwartete Ausgabe in diesem Fall anzuzeigen? Vielen Dank. –

Antwort

0

Wenn Sie bestimmte referenceTransaction Elemente ausschließen suchen, um, die Sie wirklich eine Vorlage benötigen, die referenceTransaction einstimmt, mit einer Bedingung in []. In Bezug auf die Bedingung sollten Sie die Logik umkehren. Anstatt die Bedingung für das zu haben, was Sie behalten möchten, sollten Sie es negieren, um die Bedingung zu geben, für die Sie entfernen möchten.

<xsl:template match="referenceTransaction 
         [rating/effectiveDate='' or not(starts-with(rating/ratingDataModel/ratingChar1,'WL'))]"/> 

d.h entfernen referenceTransaction wenn effectiveDate leer ist oder ratingChar1 startet nicht mit WL.

Sie haben jedoch ein zweites Problem. In Ihrem XML haben Sie Standard-Namensraum

xmlns="http://www.eagleinvsys.com/2011/EagleML-2-0" 

Aber Sie haben dies in der XSLT nicht berücksichtigt. Wenn Sie tatsächlich XSLT 2.0 verwenden, können Sie dazu xpath-default-namespace verwenden.

Versuchen Sie, diese XSLT

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0" xpath-default-namespace="http://www.eagleinvsys.com/2011/EagleML-2-0"> 
    <xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:strip-space elements="*" /> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="referenceTransaction[rating/effectiveDate='' or not(starts-with(rating/ratingDataModel/ratingChar1,'WL'))]"/> 
</xsl:transform> 

Wenn jedoch Sie verwenden XSLT 1.0, müssen Sie ein Namespacepräfix definieren und das Spiel in der Vorlage verwenden

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:eml="http://www.eagleinvsys.com/2011/EagleML-2-0"> 
    <xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 

    <xsl:strip-space elements="*" /> 

    <xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="eml:referenceTransaction[eml:rating/eml:effectiveDate='' or not(starts-with(eml:rating/eml:ratingDataModel/eml:ratingChar1,'WL'))]"/> 
</xsl:transform> 
0

Versuchen Sie, diese

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:a="http://www.eagleinvsys.com/2011/EagleML-2-0" 
    version="2.0"> 
    <xsl:output method="xml" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" /> 


    <xsl:template match="node()|@*"> 
     <xsl:copy> 
      <xsl:apply-templates select="node()|@*"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="a:referenceTransaction[normalize-space(descendant::a:effectiveDate)='' and starts-with(descendant::a:ratingChar1, 'WL')]"/> 

</xsl:transform>