2017-06-07 1 views
0

Ich habe eine XML, wo ich bestimmte Elemente aus allen Knoten auswählen muss und für die ausgewählten Elemente muss ich die Werte aus der Teilmenge des Knotens auswählen. Die Struktur der eigentlichen XML sieht aus wie this-xslt zum Auswählen des Elements aus der Teilmenge des ausgewählten Knotens

<Host> 
    <Node> 
    <element1>type0</element1> 
    <element2>Fruits0</element2> 
    </Node> 
    <Node> 
    <element1>type1</element1> 
    <element2>Fruits1</element2> 
    </Node> 
    <Node> 
     <element1>type2</element1> 
     <element2> 
     <Namelist> 
      <Names> 
      <element2>fruit2</element2> 
      <Node> 
       <element1>type3</element1> 
       <element2>Fruits3</element2> 
      </Node> 
      </Names> 
     </Namelist> 
     </element2> 
    </Node> 
    <Node> 
    <element1>type4</element1> 
    <element2>Fruits4</element2> 
    </Node> 
    <Node> 
    <element1>type5</element1> 
    <element2>Fruits5</element2> 
    </Node> 
</Host> 

Nun ist die erwartete Ausgabe von XML ist als folgt-

<html> 
<body> 
<table border="1"> 
    <tr> 
    <td>type0</td> 
    <td>Fruits0</td> 
    </tr> 
    <tr> 
    <td>type1</td> 
    <td>Fruits1</td> 
    </tr> 
    <tr> 
    <td>type2</td> 
    <td>Fruits2</td> 
    </tr> 
    <tr> 
    <td>type3</td> 
    <td>Fruits3</td> 
    </tr> 
    <tr> 
    <td>type4</td> 
    <td>Fruits4</td> 
    </tr> 
    <tr> 
    <td>type5</td> 
    <td>Fruits5</td> 
    </tr> 
</table> 
</body> 
</html> 

Die XSLT geschrieben ist als folgt-

<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/"> 
<html> 
<body> 
<table border="1"> 
    <xsl:for-each select="Host"> 
    <xsl:for-each select="//Node"> 
    <xsl:sort select="element1" /> 
    <tr> 
     <td><xsl:value-of select="element1" /></td> 
     <td><xsl:value-of select="element2" /></td> 
    </tr> 
    </xsl:for-each> 
</xsl:for-each> 
</table> 
</body> 
</html> 
</xsl:template> 
</xsl:stylesheet> 

Der Ausgang nicht ist wie erwartet -

<html> 
<body> 
<table border="1"> 
    <tr> 
    <td>type0</td> 
    <td>Fruits0</td> 
    </tr> 
    <tr> 
    <td>type1</td> 
    <td>Fruits1</td> 
    </tr> 
    <tr> 
    <td>type2</td> 
    <td>Fruits2Fruits3</td> 
    </tr> 
    <tr> 
    <td>type3</td> 
    <td>Fruits3</td> 
    </tr> 
    <tr> 
    <td>type4</td> 
    <td>Fruits4</td> 
    </tr> 
    <tr> 
    <td>type5</td> 
    <td>Fruits5</td> 
    </tr> 
</table> 
</body> 
</html> 

Ich möchte die Ausgabe für das Element mit den Daten <element2>Fruits2Fruits3</element2> formatieren, das keine untergeordneten Knotendaten enthalten sollte. Jede Hilfe würde sehr geschätzt werden. Vielen Dank.

+1

Bitte korrigieren Sie Ihre XML-Beispiel und machen es wohlgeformt ist. –

+0

Hallo @ michael.hor257k Ich habe XML-Beispiel geändert und ausgegeben. Alles, was ich brauche, ist für Element, wo Fruits2 keine Kindknoten Daten enthalten sollte. –

+1

Sie müssen '/ host/Node [3]' ordnungsgemäß schließen. Einige Elemente beginnen mit "element" und einige beginnen mit "Element" (Großbuchstabe "E"). Ist diese Inkonsistenz absichtlich oder nur ein Tippfehler? –

Antwort

0

Try-Wechsel:

<td><xsl:value-of select="element2"/></td> 

zu:

<td><xsl:value-of select="(.//element2[text()])[1]"/></td> 
Verwandte Themen