如何一个接一个地动态传递Node值?
How to pass Node values dynamically one after one?
这是我的 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>
个值。
如果您使用可以将参数传递给样式表的 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
这分别给出了用“---”分隔的所有四个对象。
这是我的 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>
个值。
如果您使用可以将参数传递给样式表的 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
这分别给出了用“---”分隔的所有四个对象。