如何一个接一个地动态传递Node值?

时间:2016-04-06 14:26:15

标签: xml xslt xpath xslt-1.0 bpel

这是我的XML输入:

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

我想一个接一个地传递这些node []值。我的意思是它会将这些值插入到我的数据库中,但首先我只想插入<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>个值。

1 个答案:

答案 0 :(得分: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

这分别给出了由'---'分隔的所有四个对象。