2016-12-30 5 views
0

Ich würde gerne eine Schleife, die in einem anderen XML-Dokument ($ fileReference) ist.Iterate durch ein anderes Xml mit Document() in xslt 1.0

siehe Code

<xsl:for-each select="document($fileRefernce)/*//Info/element/item">      
      { 
      "@Name": "<xsl:value-of  select="document($fileRefernce)/*//Info/element/item/@Name" />" , 
     "@Quantity": "<xsl:value-of select="document($fileRefernce)/*//Info/element/item/@quantity" />" 
     }<xsl:if test="$elementCount!=position()">,</xsl:if>      
    </xsl:for-each> 

wo variable element gerade ist, die Anzahl der Info/elemnt Knoten vorhanden speichert.

Wenn ich iterate durch die Info-Schleife, dann gibt es immer den Wert des ersten Knoten, obwohl es ein zweites Mal iteriert.

und ich bekomme die Ausgabe wie folgt aus:

{ 
"@Name" : "xyz", 
"@Quantity": "1" 
}, 

{ 
"@Name" : "xyz", 
"@Quantity": "1" 
}, 

Kann mir jemand sagen, wie ich dieses Problem lösen kann.

Vielen Dank im Voraus

Antwort

2

Es Sie den ersten Knoten jedes Mal, wenn geben, weil Sie den ersten Knoten jedes Mal sind die Auswahl ...

Sie haben einen hier absoluten Pfad, und es ist nicht Verwenden Sie Ihren aktuellen Kontextknoten überhaupt. Versuchen Sie, den Ausdruck zu vereinfachen, um einen relativen Pfad zu verwenden ...

<xsl:for-each select="document($fileRefernce)/*//Info/element/item">      
    { 
    "@Name": "<xsl:value-of select="@Name" />" , 
    "@Quantity": "<xsl:value-of select="@quantity" />" 
    }<xsl:if test="$elementCount!=position()">,</xsl:if>      
</xsl:for-each> 
+0

Sie speicherten mich Tim..Thanks. Ich habe andere Wege ausprobiert aber nie gedacht, dass es so einfach wäre! Danke für Ihre Mühe – hiccup

+0

@hiccup: Wenn Sie diese Antwort mögen, gilt es als höflich, es zu akzeptieren. – zx485

+0

@ zx485: Ich habe es schon getan, aber da mein Ruf weniger als 15 ist, wird meine Stimme nicht öffentlich angezeigt – hiccup