2017-06-22 5 views
0

Ich habe eine harte Zeit, dies zu schleifen.Ich muss dies mit XSLT-Code Schleife?

XML Code:

<ProcessData> 
    <Messages> 
     <MessageIds/> 
     <MessageNames> 
      <MessageName>tpname1_abc.txt</MessageName>     
      <MessageName>tpname2_def.txt</MessageName> 
      <MessageName>tpname3_pqr.txt</MessageName> 
      <MessageName>tpname4_xyz.txt</MessageName> 
     </MessageNames> 
    </Messages> 
</ProcessData> 

XSLT-Code:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:template match="/"> 
    Invalid File Received for Enrollments Inbound process in mailbox /sftptps/enrollments/deadletter 


       <xsl:for-each select="/ProcessData/Messages/MessageNames/MessageName"> 
         Username: <xsl:value-of select="substring-before(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/>  File Name:<xsl:value-of select="substring-after(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/> 

         <xsl:text>&#xd;</xsl:text> 
     </xsl:for-each> 
    </xsl:template> 
</xsl:stylesheet> 

hier meine Ausgabe ist so weit:

Invalid File Received for Enrollments Inbound process in mailbox /sftptps/enrollments/deadletter 



         Username: tpname1  File Name:abc.txt 
         Username: tpname1  File Name:abc.txt 
         Username: tpname1  File Name:abc.txt 
         Username: tpname1  File Name:abc.txt 

Ich brauche es so zu sein:

Invalid File Received for Enrollments Inbound process in mailbox /sftptps/enrollments/deadletter 



         Username: tpname1  File Name:abc.txt 
         Username: tpname2  File Name:def.txt 
         Username: tpname3  File Name:pqr.txt 
         Username: tpname4  File Name:xyz.txt 

Was mache ich hier falsch? Ich bin mir sicher, dass ich etwas vermisse, um es zu wiederholen.

Antwort

0

Sie sind schon da - nicht von oben starten. Wechsel:

<xsl:value-of select="substring-before(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/> 

zu:

<xsl:value-of select="substring-before(.,'_')"/> 

und:

<xsl:value-of select="substring-after(/ProcessData/Messages/MessageNames/MessageName/text(),'_')"/> 

zu:

<xsl:value-of select="substring-after(.,'_')"/> 

Was haben Sie jetzt wählt AlleMessageName Knoten, ausgehend von der Wurzel des Dokuments und - in XSLT 1.0 - gibt den Wert des ersten zurück.

+0

Vielen Dank !! Das hat definitiv funktioniert! –

+0

Wie würde ich das in ein Tabellenformat bringen? Zwei Spalten, 1. Benutzername 2. Dateiname? –

+0

Ein "Tabellenformat" könnte eine Menge Dinge bedeuten. Bitte posten Sie das genaue Ergebnis (als Code), das Sie erhalten möchten. –

Verwandte Themen