2016-04-06 17 views
-1

Das ist meine XML-Eingabe:Wie Knotenwerte dynamisch nacheinander übergeben werden?

<?xml version="1.0" encoding="UTF-8"?> 
<process> 
    <Object> 
     <Name>Rasi</Name> 
     <Age>28</Age> 
     <Gender>F</Gender> 
    </Object> 
    <Object> 
     <Name>Kahanna</Name> 
     <Age>32</Age> 
     <Gender>M</Gender> 
    </Object> 
    <Object> 
     <Name>jagat</Name> 
     <Age>22</Age> 
     <Gender>M</Gender> 
    </Object> 
    <Object> 
     <Name>zuvari</Name> 
     <Age>32</Age> 
     <Gender>F</Gender> 
    </Object> 
    </process> 

ich diesen Knoten [] Werte einen nach dem anderen übergeben werden soll. Ich meine, es wird diese Werte in meine Datenbank einfügen, aber zuerst möchte ich nur einfügen <object[1]> dann nach erfolgreich eingefügt wieder meine XSLT wird die nächsten <object[2]> Werte wie diese abhängig von meiner Eingabe einfügen. Also hier ist meine Frage: Wie kann ich den <object[]> Wert dynamisch in XSLT übergeben. Wenn ich for-each zu einem Zeitpunkt verwende, zu dem alle Datensätze übergeben werden, müssen einige Male nur bestimmte Knotensatzwerte übergeben werden. Wenn wie hardcore unter

<xsl:template match="/"> 
    <top:Collections> 
    <top:username> 
     <xsl:value-of select="/ns1:process/ns1:Object[1]/ns1:Name"/> 
    </top:username> 
    <top:firstname> 
     <xsl:value-of select="/ns1:process/ns1:Object[1]/ns1:Age"/> 
    </top:firstname> 
    <top:lastname> 
     <xsl:value-of select="/ns1:process/ns1:Object[1]/ns1:Gender"/> 
    </top:lastname> 
</top:collections> 
</xsl:template> 

Jedes Mal wird es erste <object> Werte einfügen nur.

+0

Wie sieht die gewünschte Ausgabe aus? – zx485

+0

ich möchte eine Ausgabe wie ' jagat M ' aber ich weiß nicht verwenden diese unter Anweisung in meinem Xslt ' ' so hilf mir bei der Übergabe von Wert dynamisch. –

+0

@ zx485: Ich frage mich, ob Ihre Bearbeitung zu diesem Beitrag das Problem maskieren könnte. Wenn das OP mit einem camel-case-Tag beginnt und mit einem kleingeschriebenen Tag endet, sollten die Leser das nicht sehen? – halfer

Antwort

1

Wenn Sie einen XSLT-Prozessor verwendet werden, die Parameter an das Stylesheet wie xsltproc passieren kann, können Sie die folgende Methode verwenden:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" omit-xml-declaration="yes" /> 
    <xsl:param name="objNum" select="'1'" /> 

    <xsl:template match="/process"> 
    <xsl:copy-of select="Object[position() = $objNum]" /> 
    </xsl:template> 
</xsl:stylesheet> 

Wenn zum Beispiel mit xsltproc mit einem Parameter der Objektnummer genannt wie dies:

xsltproc --param objNum 3 this.xslt input.xml 

Sie das dritte Objekt wie die folgende Ausgabe erhalten:

<?xml version="1.0"?> 
<Object> 
    <Name>jagat</Name> 
    <Age>22</Age> 
    <Gender>M</Gender> 
</Object> 

Sie könnten dann den Anruf an xsltproc in einem Shell-Skript enthalten (dies ist für Linux, aber Windows ist auch möglich):

#!/bin/bash 
count=1 
while [ $count -le 4 ] 
do 
    xsltproc --param objNum $count this.xslt input.xml 
    echo "---" 
    count=`expr $count + 1` 
done 

Diese separat alle getrennt durch vier Objekte gibt ‚---‘.

+0

Ich habe es in unten beschrieben und es funktioniert gut, übergibt den Wert in OjjNum Variable –

+0

'' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '' '' ' '' '' '' '' ' –

+0

Es ist toll, dass meine Lösung zu funktionieren scheint. Meine Lösung bezog sich jedoch auf den obigen Kommentar unter Ihrer Frage, der den Stil des Ergebnisses nahelegte. Also habe ich '' Tags anstelle von '' Tags verwendet, um Ihre Frage zu beantworten. Wenn Ihnen meine Antwort gefallen hat, würde ich mich freuen, wenn Sie sie annehmen. Sonst könnte ich meine Antwort ändern, um sie an Ihre speziellen Bedürfnisse anzupassen. Bitte sag mir deine Entscheidung. – zx485