- PR -

すべての要素に文字列長の属性を加えたい

1
投稿者投稿内容
ノブイチ
会議室デビュー日: 2004/10/12
投稿数: 2
投稿日時: 2004-10-12 00:08
はじめまして。初心者ですが、よろしくお願いいたします。
下記XMLデータのすべての要素に文字列長の情報として属性"length"を加えたXMLに変換したいのですが、どのようなXSLTを記述すればよいのでしょうか?

<list>
<data>
<name>東京太郎<name>
<kana>トウキョウタロウ</kana>
</data>
<data>
<name>大阪次郎<name>
<kana>オオサカジロウ</kana>
</data>
</list>

結果的に以下のようにしたいということです。

<list>
<data>
<name length="4">東京太郎<name>
<kana length="8">トウキョウタロウ</kana>
</data>
<data>
<name length="4">大阪次郎<name>
<kana length="7">オオサカジロウ</kana>
</data>
</list>

よろしくお願いいたします。


[ メッセージ編集済み 編集者: ノブイチ 編集日時 2004-10-12 00:10 ]
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-10-12 09:02
文字列長の定義によります
半角1全角2は XSLTパズルに なってしまいます。
XPath 関数 があります
http://www.infoteria.com/jp/contents/xml-data/REC-xpath-19991116-jpn.htm#function-string-length
バクシ
会議室デビュー日: 2004/10/06
投稿数: 12
投稿日時: 2004-10-12 12:05
「すべての要素に」と仰ってますが,<list>要素や<data>要素には属性を附加しないわけですね。

こうなります。術語はこれ以外にもいくつか考えられます。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="*[child::text()]">
<xsl:copy>
<xsl:attribute name="lenght">
<xsl:value-of select="string-length()"/>
</xsl:attribute>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>

</xsl:stylesheet>


[ メッセージ編集済み 編集者: バクシ 編集日時 2004-10-12 12:52 ]
ノブイチ
会議室デビュー日: 2004/10/12
投稿数: 2
投稿日時: 2004-10-12 13:01
返事ありがとうございます。
確かに<list>、<data>要素には属性をつけません。説明不足でした。
早速試してみたいと思います。
ありがとうございます!
1

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