我自己不知道XSLT。请参阅下面的要求,我现在更改了问题格式
能否请你帮我解决以下几点:
示例输出:
主题:项目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>
答案 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号