XML に編集する
ノードが存在しないか、テンプレート マッチングを使用して NULL という単語が含まれているかどうかをテストする方法を理解しようとしています。現在、一致したテンプレートで <xsl:choose> テストを使用しています。このテストを行うためのより効率的な方法はありますか?
または ノードが eixt でない場合、または NULL という単語が含まれている場合、XML では、そのノードを完全にスキップして、そのノードが正しくない理由を示すステートメントを出力します (つまり、「タイトルが存在しません」または「コンテンツが NULL です」 」)。
XML では、3 番目と 4 番目のノードはコンテンツを表示せず、代わりにコンテンツが表示されなかった理由を示すステートメントを出力する必要があります。
テストに使用している 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>
ありがとうございました。