如果条件包含和不包含方括号XSLT



我正在学习XSLT,我了解了XSLT/XPath的一个方面,但我并不清楚。

我想检查是否至少有一个元素namePart内部有值。

在XML:中可能存在类似的内容

<mods:name type="personal">
<mods:namePart type="family">Salamonis</mods:namePart>
<mods:namePart type="given"/>
</mods:name>

但这也是由于任何原因:

<mods:name type="personal">
<mods:namePart/>
</mods:name>

我想我已经找到了解决问题的办法。事实上,我找到了两个类似的解决方案,但我不明白其中的区别:

第一个:

<xsl:for-each select="mods:name">
<xsl:if test="mods:namePart/text() != ''"> ..... </xsl:if>
<xsl:for-each>

第二:

<xsl:for-each select="mods:name">
<xsl:if test="mods:namePart[text() != '']"> ..... </xsl:if>
<xsl:for-each>

显然,他们两个都工作得很好。但我仍在思考使用什么更好,或者是否存在一些细微的差异。我的解决方案来自以下评论:https://stackoverflow.com/a/7660915/14163073那么,这两种解决方案是否都符合评论?(如果左侧的至少一个项目"匹配"右侧的一个项目,则运算符返回true(

谢谢你的解释!

好吧,我想带您参观一下XPath教程。偏好通常是个人的选择和风格。对于最后一个测试,我将简单地使用例如<xsl:if test="mods:namePart = 'foo'">,因为它适用于mods:namePart元素的任何内容。这对你的简单示例来说并不重要,但最终你可能会对一些混合内容的HTML段落元素使用XPath,并希望检查它的整个内容(例如test="p = 'This is an example text.'"(,而p可以是从简单的<p>This is an example text.</p><p>This is an <b>example</b> text.</p>的任何内容。

最新更新