在xslt中逐个获取节点值
我正在使用XSl文件,从xml节点读取值并创建另一个xml文件。下面是输入xml的一部分,我想从中逐个读取值节点 输入Xml:在xslt中逐个获取节点值,xslt,Xslt,我正在使用XSl文件,从xml节点读取值并创建另一个xml文件。下面是输入xml的一部分,我想从中逐个读取值节点 输入Xml: <Param> <RoomsInvs> <RoomInv> <ProvisionalId Id="13-0000000007">13-0000000007</ProvisionalId> </RoomInv> <RoomInv> <ProvisionalId I
<Param>
<RoomsInvs>
<RoomInv>
<ProvisionalId Id="13-0000000007">13-0000000007</ProvisionalId>
</RoomInv>
<RoomInv>
<ProvisionalId Id="13-0000000008">13-0000000008</ProvisionalId>
</RoomInv>
</RoomsInvs>
<Rooms>
<Room NumberOfRooms="1" RoomId="TLC13-000005" Description="AC DEULEX" Twin="no" SupplierCode="RM" SupplierId="0" PropertyId="" ExtraBed="0" RateBasis="-4" Type="" Index="0">
<Rate Id="0" Currency="INR" Gross="4990.00" DisplayCurrency="INR" DisplayGross="4990.00" Net="4990.00" Tax="0" STax="" ExtraGuestCharge="0" AdultCount="2" AdultRate="1490.00" ChildCount="0" ChildRate=".00" Description="" Status="Available" AllocationDetails="-" SDisc="" SComm="" SRoomTotal="">
ieiorkmbjfgngjofmgfoikmfhkjg
</Rate>
</Room>
<Room NumberOfRooms="2" RoomId="TLC13-000005" Description="AC DEULEX" Twin="no" SupplierCode="RM" SupplierId="0" PropertyId="" ExtraBed="0" RateBasis="-4" Type="" Index="0">
<Rate Id="0" Currency="INR" Gross="4990.00" DisplayCurrency="INR" DisplayGross="4990.00" Net="4990.00" Tax="0" STax="" ExtraGuestCharge="0" AdultCount="2" AdultRate="1490.00" ChildCount="0" ChildRate=".00" Description="" Status="Available" AllocationDetails="-" SDisc="" SComm="" SRoomTotal="">
dbfbjsdbfjsdfbkjsdfbklnlnlsdf
</Rate>
</Room>
</Rooms>
<Param>
13-0000000007
13-0000000008
ieiorkmbjfgngjofmgfoikmfhkjg
DBFBJSDBFJSDFBKJSDFBKLNLSDF
应用的Xsl:
<Rooms>
<xsl:apply-templates select="//Rooms/Room" >
<xsl:with-param name ="IdNo" select ="//RoomsInvs/RoomInv"></xsl:with-param>
</xsl:apply-templates>
</Rooms>
<xsl:template match="Room" >
<xsl:param name="IdNo"/>
<Room>
<tempID>
<xsl:value-of select="$IdNo[position()]/ProvisionalId"/>
</tempID>
<xsl:copy-of select="Rate"/>
</Room>
输出获取:
<Rooms>
<Room>
<tempID>13-0000000007</tempID>
<Rate Id="0" Currency="INR" Gross="4990.00" DisplayCurrency="INR" DisplayGross="4990.00" Net="4990.00" Tax="0" STax="" ExtraGuestCharge="0" AdultCount="2" AdultRate="1490.00" ChildCount="0" ChildRate=".00" Description="" Status="Available" AllocationDetails="-" SDisc="" SComm="" SRoomTotal="">
ieiorkmbjfgngjofmgfoikmfhkjg
</Rate>
</Room>
<Room>
<tempID>13-0000000007</tempID>
<Rate Id="0" Currency="INR" Gross="4990.00" DisplayCurrency="INR" DisplayGross="4990.00" Net="4990.00" Tax="0" STax="" ExtraGuestCharge="0" AdultCount="2" AdultRate="1490.00" ChildCount="0" ChildRate=".00" Description="" Status="Available" AllocationDetails="-" SDisc="" SComm="" SRoomTotal="">
dbfbjsdbfjsdfbkjsdfbklnlnlsdf
</Rate>
</Room>
</Rooms>
13-0000000007
ieiorkmbjfgngjofmgfoikmfhkjg
13-0000000007
DBFBJSDBFJSDFBKJSDFBKLNLSDF
我想要的输出:
<Rooms>
<Room>
<tempID>13-0000000007</tempID>
<Rate Id="0" Currency="INR" Gross="4990.00" DisplayCurrency="INR" DisplayGross="4990.00" Net="4990.00" Tax="0" STax="" ExtraGuestCharge="0" AdultCount="2" AdultRate="1490.00" ChildCount="0" ChildRate=".00" Description="" Status="Available" AllocationDetails="-" SDisc="" SComm="" SRoomTotal="">
ieiorkmbjfgngjofmgfoikmfhkjg
</Rate>
</Room>
<Room>
<tempID>13-0000000008</tempID>
<Rate Id="0" Currency="INR" Gross="4990.00" DisplayCurrency="INR" DisplayGross="4990.00" Net="4990.00" Tax="0" STax="" ExtraGuestCharge="0" AdultCount="2" AdultRate="1490.00" ChildCount="0" ChildRate=".00" Description="" Status="Available" AllocationDetails="-" SDisc="" SComm="" SRoomTotal="">
dbfbjsdbfjsdfbkjsdfbklnlnlsdf
</Rate>
</Room>
</Rooms>
13-0000000007
ieiorkmbjfgngjofmgfoikmfhkjg
13-0000000008
DBFBJSDBFJSDFBKJSDFBKLNLSDF
问题在于,您在谓词内部(在[]
符号之间)使用了position()
,其含义不同。应该将position()
分配给变量,然后使用该变量。我相信这会产生预期的结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>
<xsl:template match="/">
<Rooms>
<xsl:apply-templates select="//Rooms/Room">
<xsl:with-param name="IdNo" select="//RoomsInvs/RoomInv" />
</xsl:apply-templates>
</Rooms>
</xsl:template>
<xsl:template match="Room">
<xsl:param name="IdNo" select="/.." />
<xsl:variable name="pos" select="position()" />
<Room>
<tempID>
<xsl:value-of select="$IdNo[$pos]/ProvisionalId" />
</tempID>
<xsl:copy-of select="Rate" />
</Room>
</xsl:template>
</xsl:stylesheet>
您给出的解决方案是正确的,但我错了。我没有被恰当地提到,我现在通过XSL所做的事情我已经编辑好了。好的,但是从你的例子来看,我不确定你想要完成什么。你能解释一下吗?或者我的示例解决了您的问题吗?在这个问题中,我调用了一个模板来完成其他一些工作。这个模板为我提供了两个节点,在这两个节点中,我希望获得两个“临时ID”值其中一个值用于模板的第一个节点,另一个值用于模板的第二个节点,但我得到了模板中两个节点的第一个值。所以我的问题是,如何避免重复,或者如何为从模板返回的每个节点获取单独的值?好的,我想我理解,但是您能提供一个与更新的XSLT对应的示例XML输入吗?您提供的代码仍然不包含任何SomeOtherValue
元素。