2016-04-06 20 views
-1

這是我的XML輸入:如何一次一個地動態傳遞Node值?

<?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> 

我想通過這些節點[]值一一之後。我的意思是它會將這些值插入到我的數據庫中,但首先我只想插入<object[1]>,然後再次成功插入後,我的XSLT將插入下一個<object[2]>值,這取決於我的輸入。 所以,這裏是我的問題:我如何在XSLT中動態地傳遞<object[]>的值。如果我一次使用for-each,則所有記錄都會通過,但有時只需要傳遞特定的節點設置值。如果像下面鐵桿

<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> 

每次只會插入第一<object>值。

+0

期望的輸出是什麼樣的? – zx485

+0

我想輸出像 ' 傑格德 中號 ' ,但我不希望在我的XSLT '的 ' 所以幫助我動態傳遞值。 –

+0

@ zx485:我想知道你對這篇文章的修改是否會掩蓋問題。如果OP打開駱駝標記並以小寫標記關閉,讀者是否應該看到這一點? – halfer

回答

1

如果使用XSLT處理器可以將參數傳遞給樣式表等xsltproc,可以使用以下方法:

<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> 

當,例如,調用xsltproc與像對象數目的參數這樣的:

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

你得到第三個對象爲以下的輸出:

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

然後,您可以包括在shell腳本調用xsltproc(這是Linux操作系統,但Windows也可以):

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

這分別給出了「---」分開的所有四個對象。

+0

我嘗試了下面的方式,它的工作正常,將值傳遞給ojjNum變量 –

+0

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

+0

這是偉大的,我的解決方案似乎是工作的罰款。但是,我的解決方案與您的問題下面的註釋有關,這些問題暗示了結果的風格。所以我用''標籤來代替''標籤來回答你的問題。如果你喜歡我的回答,我會很感激你接受它。否則,我可以修改我的答案以適應您的特殊需求,使其完美適合。請告訴我你的決定。 – zx485

相關問題