这是我第一次尝试xslt。
我正在设置要在PDF表单上打印的字段。
我有这个:
<Field>
<Name>Accident1_Name</Name>
<Value>
<xsl:value-of
select="PersPolicy/AccidentViolation[1]/@DriverRef" />
</Value>
<Type>Tx</Type>
</Field>
但这只是给我一个司机号码。
XML中的看起来像这样
<AccidentViolation id="N196" DriverRef="N86" saved="true">
<AccidentViolationCd id="N202">NO</AccidentViolationCd>
<AccidentViolationDt id="N198">2012-04-05</AccidentViolationDt>
<PlaceIncident id="N201">Tampa Florida</PlaceIncident>
<ConvictionDt id="N199">2012-04-05</ConvictionDt>
<AccidentViolationRecordTypeCd id="N200">AAM</AccidentViolationRecordTypeCd>
</AccidentViolation>
<PersDriver id="N86" saved="true">
<GeneralPartyInfo id="N88">
<NameInfo id="N89">
<PersonName id="N90">
<Surname id="N93">Test</Surname>
<GivenName id="N91">Mary</GivenName>
<OtherGivenName id="N92">P</OtherGivenName>
</PersonName>
<CommlName id="N116">
<CommercialName id="N117">School District</CommercialName>
</CommlName>
</NameInfo>
<Addr id="N119">
<AddrTypeCd id="N118">EmployerAddress</AddrTypeCd>
<Addr1 id="N120">100 Applewild</Addr1>
<City id="N121">Lady Lake</City>
<StateProvCd id="N122">FL</StateProvCd>
<PostalCode id="N123">33333-4444</PostalCode>
</Addr>
</GeneralPartyInfo>
</PersDriver>
如何让该字段显示&#39; Test Mary&#39;?
感谢您提供的任何帮助。很抱歉,如果这是另一个问题的重复,我也不太清楚要搜索的内容。
感谢帮助。
答案 0 :(得分:0)
您可以使用键执行此操作。将它放在XSLT顶部附近,xsl:stylesheet
元素内以及任何xsl:template
元素之外:
<xsl:key name="kPers" match="PersDriver" use="@id" />
然后你可以这样做:
<xsl:variable name="a1driver"
select="key('kPers', PersPolicy/AccidentViolation[1]/@DriverRef)" />
<Field>
<Name>Accident1_Name</Name>
<Value>
<xsl:variable name="name"
select="$a1driver/GeneralPartyInfo/NameInfo/PersonName" />
<xsl:value-of select="concat($name/Surname, ' ', $name/GivenName)" />
</Value>
<Type>Tx</Type>
</Field>
$a1driver
应该是对驱动程序PersDriver
元素的引用,您可以使用它来获取有关所需驱动程序的任何其他信息。
为多个驱动程序执行此操作的更动态的方法(就像您在发布的答案中所做的那样)是使用for-each
或template
s:
<xsl:for-each select="PersPolicy/AccidentViolation">
<xsl:variable name="driver" select="key('kPers', @DriverRef)" />
<Field>
<Name><xsl:value-of select="concat('Accident', position(), '_Name')" /></Name>
<Value>
<xsl:variable name="name"
select="$driver/GeneralPartyInfo/NameInfo/PersonName" />
<xsl:value-of select="concat($name/Surname, ' ', $name/GivenName)" />
</Value>
<Type>Tx</Type>
</Field>
</xsl:for-each>