段落内にある複数の文字飾りをXSLTで処理したい。
段落内に文字飾りがある場合、1つであればsubstring-before/afterを使用して文字列中に文字飾り(下記の例ではsup)を埋め込むことができますが、これが複数の場合はどうすればよいのでしょうか?
1つの場合の変換元ソース:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <root> <p>回転数は1,000 min<span class="sup">-1</span>以上</p> </root>
1つの場合の変換XSLT:
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> <xsl:template match="/"> <topic> <title>character test</title> <body> <xsl:apply-templates/> </body> </topic> </xsl:template> <xsl:template match="root"> <xsl:apply-templates/> </xsl:template> <xsl:template match="p"> <xsl:variable name="text" select="."/> <p> <xsl:value-of select="substring-before($text,span)"/> <xsl:apply-templates select="./span"/> <xsl:value-of select="substring-after($text,span)"/> </p> </xsl:template> <xsl:template match="span[@class='sup']"> <sup><xsl:value-of select="."/></sup> </xsl:template> </xsl:stylesheet>
1つの場合の結果:
<?xml version="1.0" encoding="UTF-8"?> <topic> <title>character test</title> <body> <p>回転数は1,000 min<sup>-1</sup>以上</p> </body> </topic>
変換できない複数の場合の変換元ソース:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE xml> <root> <p>回転数は1,000 min<span class="sup">-1</span>から2,000 min<span class="sup">-1</span>まで</p> </root>
このような場合はどのようなXSLTを組めばよいのでしょうか。
よろしくアドバイスのほど、お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/04/14 01:46