我有以下DXL(即Lotus Notes XML数据):
<?xml version='1.0' encoding="ISO-8859-1"?>
<document xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='4.0'>
<noteinfo>
<created><datetime>20020225T160055,64-05</datetime></created>
<updatedby><name>CN=John Doe/O=MyOrg</name></updatedby>
</noteinfo>
</document>
我正在尝试使用XSLT样式表将DXL转换为HTML,但生成的HTML不包含任何数据元素。我之前没有使用过DXL数据,而且我的XSLT有点生疏,所以我不确定是什么问题。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0">
<xsl:template match="/">
<html>
<body>
<h2>Submission</h2>
<table border="1">
<tr>
<td>Create date:</td>
<td><xsl:value-of select="document/noteinfo[1]/created[1]/datetime[1]"/></td>
</tr>
<tr>
<td>Updated by:</td>
<td><xsl:value-of select="updatedby[1]/name[1]"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
您的源XML在其中声明了一个默认命名空间:
<document xmlns='http://www.lotus.com/dxl' version='6.5' maintenanceversion='4.0'>
这意味着您需要声明它并在样式表中的XPath中使用它:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:my="http://www.lotus.com/dxl">
然后,您需要在XSLT中的XPath中引用它:
<xsl:value-of select="my:document/my:noteinfo[1]/my:created[1]/my:datetime[1]"/>
如果您使用的是XSLT 2.0,则可以在样式表部分指定xpath-default-namespace="http://www.lotus.com/dxl"
。
这是我的尝试,使用名称空间声明:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="2.0" xmlns:my="http://www.lotus.com/dxl">
<xsl:template match="/">
<html>
<body>
<h2>Submission</h2>
<table border="1">
<tr>
<td>Create date:</td>
<td><xsl:value-of select="my:document/my:noteinfo[1]/my:created[1]/my:datetime[1]"/></td>
</tr>
<tr>
<td>Updated by:</td>
<td><xsl:value-of select="my:document/my:noteinfo[1]/my:updatedby[1]/my:name[1]"/></td>
</tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Updated by
单元格的XPath不正确,因此我已对此进行了更正,以便从示例XML中获取值。