我有一个包含客户详细信息的XML(公司名称,地址,邮政编码,城市,敬语,名字等。)
<Addresses locale="AU">
<Address>
<Honorific/>
<FirstName/>
<LastName/>
<CompanyName>Braschs Pty Ltd</CompanyName>
<CompanyName2/>
<Address1>71 Sheridan Street</Address1>
<Address2/>
<PostalCode>4870</PostalCode>
<City>Cairns</City>
<City2/>
<District/>
<StateCode>QLD</StateCode>
<State>Queensland</State>
<CountryCode/>
<Country/>
</Address>
</Addresses>
一个xsl文件应该按照澳大利亚地址的顺序给出输出。 (不同国家有不同的写地址方式)
<xsl:template match="//Address[../@locale='AU']">
<address>
<p>
<xsl:if test=" Honorific != '' "><xsl:value-of select="Honorific" /> </xsl:if><xsl:if test=" FirstName != '' "><xsl:value-of select="FirstName" /> </xsl:if><xsl:if test=" LastName != '' "><xsl:value-of select="LastName" /></xsl:if>
</p>
<h4><xsl:value-of select="CompanyName" /></h4>
<p>
<xsl:if test=" CompanyName2 != '' ">
<xsl:value-of select="CompanyName2" /><br />
</xsl:if>
<xsl:value-of select="Address1" /><br />
<xsl:if test=" Address2 != '' ">
<xsl:value-of select="Address2" /><br />
</xsl:if>
<xsl:value-of select="City" />, <xsl:value-of select="StateCode" /> <xsl:value-of select="PostalCode" /><br />
<xsl:if test="Country!= '' ">
<xsl:value-of select="Country"/>
</xsl:if>
</p>
</address>
</xsl:template>
这给了我输出:
<address>
<p />
<h4>Braschs Pty Ltd</h4>
<p>71 Sheridan Street<br />Cairns, QLD 4870<br />
</p>
</address>
我现在有一个空的p-tag,因为p-tag中没有值可用(敬语,名字,姓氏)。
那么什么是摆脱空标签的最佳选择?我可以检查输出的空标签并将其删除吗?
我想到了一个if-direction,如:
<xsl:if test=" Honorific != '' " or "FirstName != '' ">
但我收到的错误是“错误地点。”
谢谢!
答案 0 :(得分:0)
我现在有一个空的p-tag,因为p-tag中没有任何值 可用(敬称,名字,姓氏)。
那么什么是摆脱空标签的最佳选择?我可以吗 检查我的输出是否有空标签并将其删除?
是的,您可以按照以下方式执行此操作:
<xsl:template match="Address[../@locale='AU']">
<address>
<xsl:if test="string(Honorific) or string(FirstName) or string(LastName)">
<p>
<!-- handle Honorific, FirstName and LastName here -->
</p>
</xsl:if>
<!-- the rest of the code here -->
</address>
</xsl:template>
“处理Honorific,FirstName和LastName”的更优雅方式是:
<xsl:for-each select="Honorific[string()] | FirstName[string()] | LastName[string()]">
<xsl:value-of select="." />
<xsl:if test="position() != last()">
<xsl:text> </xsl:text>
</xsl:if>
</xsl:for-each>
或通过向他们应用模板来做同样的事情。