編輯爲XML測試節點是否爲空或使用模板匹配包含NULL
我想弄清楚如何測試節點是否存在或包含使用模板匹配的NULL字。目前,我在我的匹配模板中使用了< xsl:choose> test。有沒有更有效的方法來做這個測試?
在XML中,如果節點沒有eixt或包含單詞NULL,那麼我想完全跳過該節點並打印出一個說明爲什麼該節點不正確的說法(即「TITLE不存在」或「 CONTENT是NULL「)。
在XML中,我有第三個和第四個節點不應該顯示任何內容,而是打印一個聲明,說明爲什麼不顯示內容。
這裏是我用來測試的XML的例子:
<?xml version="1.0" encoding="utf-8"?>
<FIGURES>
<FIGURE>
<TITLE>Title 1</TITLE>
<DESC>Description 1</DESC>
<CONTENT>Content 1</CONTENT>
</FIGURE>
<FIGURE>
<TITLE>Title 2</TITLE>
<DESC>Description 2</DESC>
<CONTENT>Content 2</CONTENT>
</FIGURE>
<FIGURE>
<DESC>Description 3</DESC>
<CONTENT>Content 3</CONTENT>
</FIGURE>
<FIGURE>
<TITLE>Title 4</TITLE>
<DESC>Description 4</DESC>
<CONTENT>NULL</CONTENT>
</FIGURE>
<FIGURE>
<TITLE>Title 5</TITLE>
<DESC>Description 5</DESC>
<CONTENT>Content 5</CONTENT>
</FIGURE>
</FIGURES>
這裏是我使用XSLT:
<?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="/">
<div class="container">
<xsl:apply-templates />
</div>
</xsl:template>
<xsl:template match="FIGURES">
<ul class="list">
<xsl:apply-templates select="FIGURE" mode="titles" />
</ul>
<div class="content">
<xsl:apply-templates select="FIGURE" mode="content" />
</div>
</xsl:template>
<xsl:template match="FIGURE" mode="titles">
<xsl:choose>
<!-- Check to see if the TITLE field is empty -->
<xsl:when test="translate(./TITLE,' ', '') = ''">The TITLE node is empty</xsl:when>
<!-- Check to see if the TITLE field is NULL -->
<xsl:when test="normalize-space(./TITLE) = 'NULL'">The TITLE node is NULL</xsl:when>
<!-- Check to see if the CONTENT field is empty -->
<xsl:when test="translate(./CONTENT,' ', '') = ''">The CONTENT node is empty</xsl:when>
<!-- Check to see if the CONTENT field is NULL -->
<xsl:when test="normalize-space(./CONTENT) = 'NULL'">The CONTENT node is NULL</xsl:when>
<xsl:otherwise>
<li>
<a href="#section-{position()}">
<h3><xsl:value-of select="TITLE" /></h3>
</a>
<p><xsl:value-of select="DESC" /></p>
</li>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template match="FIGURE" mode="content">
<xsl:choose>
<!-- Check to see if the TITLE field is empty -->
<xsl:when test="translate(./TITLE,' ', '') = ''">The TITLE node is empty</xsl:when>
<!-- Check to see if the TITLE field is NULL -->
<xsl:when test="normalize-space(./TITLE) = 'NULL'">The TITLE node is NULL</xsl:when>
<!-- Check to see if the CONTENT field is empty -->
<xsl:when test="translate(./CONTENT,' ', '') = ''">The CONTENT node is empty</xsl:when>
<!-- Check to see if the CONTENT field is NULL -->
<xsl:when test="normalize-space(./CONTENT) = 'NULL'">The CONTENT node is NULL</xsl:when>
<xsl:otherwise>
<div id="section-{position()}">
<p><xsl:value-of select="CONTENT" /></p>
</div>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
謝謝。
對你也是如此。這個解決方案適用於我原來的問題,但是我在發佈該問題時犯了一個錯誤。當XML節點不包含任何值時,它不會顯示。例如,如果