XSLT:处理空值和空字符串的最佳实践

时间:2013-12-20 12:18:26

标签: xslt

我自己不知道XSLT。请参阅下面的要求,我现在更改了问题格式

能否请你帮我解决以下几点:

  1. 需要输出以下参见样本输出。
  2. SSN / PSN,两者都可能有前导零,应该删除
  3. 应根据节点是否具有值
  4. 来显示SSN或PSN
  5. 如果SSN或PSN的字符串为null,则应该将其抑制。
  6. 地址可能为null,应该被禁止
  7. 示例输出:

    主题:项目SSN; concat和

    地址:

    源XML文件:

        <?xml version='1.0'?>
        <!-- This file represents a fragment of a book store inventory database -->
        <bookstore>
          <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
            <title>The Autobiography of Benjamin Franklin</title>
            <author>
              <first-name>Benjamin</first-name>
              <last-name>Franklin</last-name>
              <SSN>0001111</SSN>
              <PSN></PSN>
              <address>null</address>
            </author>
            <price>8.99</price>
          </book>         
    </bookstore>
    

1 个答案:

答案 0 :(得分:0)

No.1:所需的输出不太清楚:它应该采用什么格式(XML,HTML,文本)?

No.2,3和4:使用表达式“number(SSN)”作为测试和结果 - 看一个非常相似的问题here。这是假设这些项目是数字。

No.5:几乎相同:测试“地址和地址!='null'”。

免责声明:我们只看到整个画面的一小部分。在这种情况下,任何关于战略的建议都是最好的。


<强>加了:

我可能不应该这样做,因为它更接近教程而不是答案。尽管如此,本赛季的精神......

鉴于此XML源文档:

<?xml version='1.0'?>
<bookstore>
    <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
        <title>The Autobiography of Benjamin Franklin</title>
        <author>
            <first-name>Benjamin</first-name>
            <last-name>Franklin</last-name>
            <SSN>0001111</SSN>
            <PSN></PSN>
            <address>null</address>
        </author>
        <price>8.99</price>
    </book>     
    <book genre="autobiography" publicationdate="2004" ISBN="9785961401875">
        <title>My Life</title>
        <author>
            <first-name>Bill</first-name>
            <last-name>Clinton</last-name>
            <SSN></SSN>
            <PSN>00022</PSN>
            <address>1600 Pennsylvania Avenue</address>
        </author>
        <price>8.99</price>
    </book>     
</bookstore>

以下样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="utf-8"/>

<xsl:template match="/bookstore">
    <html>
    <head/>
    <body>
        <h1>Books</h1>
        <hr/>
        <xsl:apply-templates select="book"/>
    </body>
    </html>
</xsl:template>

<xsl:template match="book">
    <h3><xsl:value-of select="title" /></h3>
    <xsl:apply-templates select="author"/>
    <hr/>
</xsl:template>

<xsl:template match="author">
    <p>
        <xsl:text>Author: </xsl:text>
        <xsl:value-of select="concat(last-name, ', ', first-name)" />
        <br/>

        <xsl:if test="number(SSN)">
            <xsl:text>SSN: </xsl:text>
            <xsl:value-of select="number(SSN)" />
            <br/>
        </xsl:if>

        <xsl:if test="number(PSN)">
            <xsl:text>PSN: </xsl:text>
            <xsl:value-of select="number(PSN)" />
            <br/>
        </xsl:if>

        <xsl:if test="address/text() and address!='null'">
            <xsl:text>Address: </xsl:text>
            <xsl:value-of select="address" />
        </xsl:if>
    </p>
</xsl:template>

</xsl:stylesheet>

将产生此输出:

<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<h1>Books</h1>
<hr>
<h3>The Autobiography of Benjamin Franklin</h3>
<p>Author: Franklin, Benjamin<br>SSN: 1111<br></p>
<hr>
<h3>My Life</h3>
<p>Author: Clinton, Bill<br>PSN: 22<br>Address: 1600 Pennsylvania Avenue</p>
<hr>
</body>
</html>

呈现为:

图书


本杰明·富兰克林的自传

作者:Franklin,Benjamin
SSN:1111


我的生活

作者:Clinton,Bill
PSN:22

地址:宾夕法尼亚大道1600号