- PR -

XSLで改行の扱い

1
投稿者投稿内容
AE
会議室デビュー日: 2003/11/13
投稿数: 5
投稿日時: 2003-12-17 09:32
いつもお世話になっています。

XMLの中にある改行マーク

XML例 :<AAA>あいうえお&#x0A;かきくけこ</AAA>

を認識してHTMLへ敬称したい

HTML例:<HTML>あいうえお<BR/>かきくけこ</HTML>

としたいのですがXSLでどのように記述すればよろしいのでしょうか?

よろしくお願いします。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-12-17 10:11
ども、ほむらです。
普通の置換ってどうやるんでしょうね。
XSLTの仕様範囲外なのかな?
まぁ基本的にはtranslateがあるので不自由していませんが
----------
ご希望のやり方は僕も知りませんが代替案ならば。。。
コード:
xmlns:xsl="http://www.w3c.org/1999/XSL/Transform"
<xsl:template match="AAA">
  <xsl:copy-of select="child::node()"/>
</xsl:template>


こうすると。。って説明はいいかな?
簡単に言えば書いたことがそのままコピーされます。
詳細は色々実験してみたりgoogleなどで検索して調べてみてください

参考URL:
タイトル:たのしいXML
URL:http://www.cityfujisawa.ne.jp/~yanai/xml/
このページの左ペインからXPath(入門編)でaxisの説明があったりします。
感覚的なものとしてすごくお勧めです。
かずくん
ぬし
会議室デビュー日: 2003/01/08
投稿数: 759
お住まい・勤務地: 太陽系第三惑星
投稿日時: 2003-12-17 10:48
XMLデータ内に改行というレイアウト情報を持たせるという設計を見直したほうが良いのではと思います。
現在は、改行に置換するだけかもかもしれませんが、もしリストやテーブルとしても表示したいとなったときに、破綻する可能性が考えられます。

HTMLで改行を行うことにおいて、<br />だけでなく<div>〜</div>ということも視野に入れて見てはいかがでしょう。
yatcin
会議室デビュー日: 2003/11/21
投稿数: 12
投稿日時: 2003-12-18 02:21
XMLソースやHTML文書で何を表現するのか分からないので何とも言えないですが、そもそもソース文書を作成する段階で改行コードを含む必要はないと思います(最終的にHTMLで<br/>になるんだとしたらなおさらです)。この部分に改行が入る、という何らかのマークが存在していればよいわけで例えば

<AAA>あいうえお<br/>かきくけこ</AAA>

でも良いのではないでしょうか。逆に、もしもデータの区切りとしての改行を考えているのだとしたら1個の要素中に表現していること自体が間違っていて

<root>
<AAA>あいうえお</AAA>
<AAA>かきくけこ</AAA>
</root>

というようにデータの最小単位で分けられるべきだと思います。
AE
会議室デビュー日: 2003/11/13
投稿数: 5
投稿日時: 2003-12-18 12:41
いつもお世話になっています。 AEです。

貴重なご意見、ありがとうございます。
本件、XMLデータは上流よりくるデータのため加工が不可能です。
当然、PerlかなにかでXSL表示前に加工する手はありますが。。。。
XSLでtranslateも試したのですがうまく置き換わりませんでした。
&#x0A;の置換えは無理なのでしょうか?
t-wata
大ベテラン
会議室デビュー日: 2002/07/12
投稿数: 209
お住まい・勤務地: 東京
投稿日時: 2003-12-18 16:21
>
の置換えは無理なのでしょうか?

substring-beforeと、substring-afterを使って、
の前と後ろに分離できませんか?
ちなみに、translateは1文字単位の置き換えしかできません。
translate("t-wata", "abc", "ABC")
とやると、t-wAtAになります。

コード:
<xsl:template match="text()">
  <xsl:call-template name="appendbr">
   <xsl:with-param name="para1"><xsl:value-of select="."/></xsl:with-param>
  </xsl:call-template>
</xsl:template>

<xsl:template name="appendbr">
 <xsl:param name="para1"/>
 <xsl:choose >
  <xsl:when test="contains($para1,'&#x0A;')">
   <xsl:value-of select="substring-before($para1,'&#x0A;')"/><br/>
   <xsl:call-template name="appendbr">
    <xsl:with-param name="para1"><xsl:value-ofselect="substring-after($para1,'&#x0A;')"/></xsl:with-param>
   </xsl:call-template>
  </xsl:when>
  <xsl:otherwise >
   <xsl:value-of select="$para1"/>
  </xsl:otherwise>
 </xsl:choose>
</xsl:template>

BBSハンドル名
会議室デビュー日: 2003/04/09
投稿数: 8
投稿日時: 2003-12-18 16:26
できますよー
Googleで
「置換 改行 XSLT」
で検索すると一番目に出てきます。
AE
会議室デビュー日: 2003/11/13
投稿数: 5
投稿日時: 2003-12-25 08:57
いつもお世話になっています。 AEです。

返信遅くなりましたが、無事 解決できました。
いい年が越せそうです。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)