【问题标题】:empty html-tags in xls ouput / multiple if'sxsl输出中的空html标签/多个ifs
【发布时间】:2015-07-02 12:16:44
【问题描述】:

我有一个包含客户详细信息的 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 方向,例如:

<xsl:if test=" Honorific != '' " or "FirstName != '' ">

但是我得到一个错误,“在错误的位置。

谢谢!

【问题讨论】:

    标签: html xml xslt


    【解决方案1】:

    我现在有一个空的 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>
    

    “处理尊称、名字和姓氏”的更优雅的方式是:

    <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>
    

    或者通过对它们应用模板来做同样的事情。

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多