我合并了两个文件,一个WADL文件和一个包含DITA片段的XML文件,最终生成一个DITA文件。 DITA片段可以是一串文本或一组DITA标签。尝试使用以下测试确定DITA片段文件中的元素是否已填充(或甚至存在):
<xsl:variable name="docIDtext" select="$docId//doc[@id=$resourcepath]/*|text()"/>
<xsl:choose>
<xsl:when test="$docIDtext">
<xsl:copy-of select="$docIDtext"/>
</xsl:when>
<xsl:otherwise>
<draft-comment author="doc">FIXME: missing DocID</draft-comment>
</xsl:otherwise>
</xsl:choose>
但是,$docIDtext
的测试始终为真,这不是正确的结果。这是讨厌的&#34; *&#34;。我该怎么做这个测试?
答案 0 :(得分:1)
如果没有输入文档和预期的输出,这有点难以辨别,但我想修复是写:
<xsl:variable name="docIDtext" select="
$docId//doc[@id=$resourcepath]/* |
$docId//doc[@id=$resourcepath]/text()
"/>
a/b|c
形式的表达式被评估为(a/b) | c
,而不是a/(b|c)
,后者在XPath 1.0中无效。
可以通过使用xsl:variable
元素的临时值来优化上面的doc
指令。但最好的解决方案可能是使用node()
节点测试,它将匹配任何类型的子节点:
<xsl:variable name="docIDtext" select="$docId//doc[@id=$resourcepath]/node()"/>
这将返回子元素和文本节点(以及注释和处理指令)。