我的XML文档中有一些注释。每个注释都遵循以下规则:
NOTE1
NOTE1<div>NOTE2</div>
<div>NOTE2</div>
在我的XML中,我有:
<MeetingWorkBook>
<Labels>
<Note>Note</Note>
</Labels>
<Meeting>
<Note>Note1</Note>
</Meeting>
<Meeting>
<Note>Note1<div>Note2</div></Note>
</Meeting>
<Meeting>
<Note><div>Note2</div></Note>
</Meeting>
</MeetingWorkBook>
在XSL文件中我有:
<?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" indent="yes" version="4.01"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="//W3C//DTD XHTML 1.0 Transitional//EN"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<link rel="stylesheet" type="text/css" href="Workbook-off.css"/>
<title>Title</title>
</head>
<body>
<xsl:for-each select="MeetingWorkBook/Meeting">
<table>
<xsl:if test="normalize-space(Note) != ''">
<tr>
<td class="borderDotMeetingNotes" colspan="4">
<xsl-if test="normalize-space(substring-before(Note, '<div>') != '')">
<xsl:value-of select="//Labels/Note"/>: 
</xsl-if>
<xsl:value-of select="Note" disable-output-escaping="yes"/>
</td>
</tr>
</xsl:if>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我想要实现的目标是什么?在最终输出中,如果有NOTE1,那么我想显示“Note:”标签前缀。就是这样。
第三个示例失败,因为没有NOTE1。这比实际更难以解释。 :(
我试过了:
<xsl:if test="normalize-space(Note) != ''">
<tr>
<td class="borderDotMeetingNotes" colspan="4">
<xsl-if test="normalize-space(substring-before(Note, '<div>') != '')">
<xsl:value-of select="//Labels/Note"/>: 
</xsl-if>
<xsl:value-of select="Note" disable-output-escaping="yes"/>
</td>
</tr>
</xsl:if>
但“注意:”仍然出现。
答案 0 :(得分:1)
如果我理解正确(完全不确定)你想进行测试:
<xsl:if test="substring-before(Note, '<div>')">
<xsl:value-of select="//Labels/Note"/>: 
</xsl:if>
注意:您需要使用<xsl:if>
,而不是<xsl-if>
。
答案 1 :(得分:0)
感谢已提供的答案和随后的评论。
似乎使用 normalize-space 仍然让事情变得混乱,最后我做了这个似乎完全可以运作的事情:
<xsl:if test="normalize-space(Note) != ''">
<tr>
<td class="borderDotMeetingNotes" colspan="4">
<xsl:if test="normalize-space(substring-before(Note, '<div')) or not(contains(Note, '<div'))">
<xsl:value-of select="//Labels/Note"/>: 
</xsl:if>
<xsl:value-of select="Note" disable-output-escaping="yes"/>
</td>
</tr>
</xsl:if>
请注意,最后我还搜索了&lt; div ,因为用户实际上有一个与div关联的类。