質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XSLT

XSLTは、組み立てられた文書を(XML、HTML、そしてプレーンテキストのような)別のフォーマットに変化する為にデザインされたXMLの為の変換用言語です。

Q&A

解決済

1回答

655閲覧

段落内にある複数の文字飾りをXSLTで処理したい

UG_ito_Pcorp

総合スコア13

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

XSLT

XSLTは、組み立てられた文書を(XML、HTML、そしてプレーンテキストのような)別のフォーマットに変化する為にデザインされたXMLの為の変換用言語です。

0グッド

0クリップ

投稿2023/04/13 08:44

段落内にある複数の文字飾りを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を組めばよいのでしょうか。
よろしくアドバイスのほど、お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

<p><xsl:apply-templates/></p> だけでよいかと思います。

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 3 xmlns:xs="http://www.w3.org/2001/XMLSchema" 4 exclude-result-prefixes="xs" 5 version="2.0"> 6 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 7 8 <xsl:template match="/"> 9 <topic> 10 <title>character test</title> 11 <body> 12 <xsl:apply-templates/> 13 </body> 14 </topic> 15 </xsl:template> 16 17 <xsl:template match="root"> 18 <xsl:apply-templates/> 19 </xsl:template> 20 21 <xsl:template match="p"> 22 <p> 23 <xsl:apply-templates/> <!-- here --> 24 </p> 25 </xsl:template> 26 27 <xsl:template match="span[@class='sup']"> 28 <sup><xsl:value-of select="."/></sup> 29 </xsl:template> 30 31</xsl:stylesheet>

投稿2023/04/13 09:19

編集2023/04/13 09:22
melian

総合スコア20574

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

UG_ito_Pcorp

2023/04/14 01:46

ご回答、ありがとうございました。思いもよらぬ解決方法でした…。 ただ、なぜ今回の方法で<p>要素のテキスト部分が抽出されるのか分かりません。 新たに、そのあたりの質問を投稿しました。 また、ご回答いただけると幸いです。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問