xls输出/多个if中的空html标签

时间:2015-07-02 12:16:44

标签: html xml xslt

我有一个包含客户详细信息的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" />&#160;</xsl:if><xsl:if test=" FirstName != '' "><xsl:value-of select="FirstName" />&#160;</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" />,&#160;<xsl:value-of select="StateCode" />&#160;<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 != '' ">

但我收到的错误是“错误地点。”

谢谢!

1 个答案:

答案 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>&#160;</xsl:text>
    </xsl:if>
</xsl:for-each>

或通过向他们应用模板来做同样的事情。