- PR -

XMLのタグごと文字列で取得

投稿者投稿内容
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2005-10-18 14:39
初めて投稿します。
かなり前から
考えて違う方法などを取ってきたのですが、
そうはいかなくなったので質問します。

XMLのタグごとを文字列で取得したいのですが、
例えば
〔XML〕
<MajTag>
<a>aaa</a>
<b>bbb</b>
<c>
<d>ddd</d>
</c>
</MajTag>

というXMLがあるとすると
MajTag以下のタグの内容をタグごと取得したいのです。

「 <a>aaa</a><b>bbb</b><c><d>ddd</d></c>  」
という感じで。

でも、普通に取得すると
「aaabbbddd」となってしまいます。

不可能なんでしょうか?
わかる方いらっしゃったら教えてください。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-10-18 15:28
<xsl:copy-of
で検索。 ひとつの方法としては
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2005-10-18 17:03
copy-ofというのがあるのは知りませんでした。
大変勉強になります。ありがとうございます。

copy-ofを試してみましたが、
「文字列として取得」することができませんでした。
<xsl:copy-of select="MajTag"/>はできましたが、

<xsl:element name="input">
<xsl:attribute name="name">objMajTag</xsl:attribute>
<xsl:attribute name="type">text</xsl:attribute>
<xsl:attribute name="value"><xsl:copy-of select="MajTag"/></xsl:attribute>
</xsl:element>
とするとテキストは空になります。

さらに詳しく書くと、私がしたいのは
<xsl:element name="input">
<xsl:attriubte name="type">button</xsl:attribute>
<xsl:attribute name="click">
alert(document.all.objMajTag.value);
</xsl:attribute>
</xsl:element>
として、
「 <a>aaa</a><b>bbb</b><c><d>ddd</d></c>  」
と出れば成功なのですが、
やはり文字列でとるのは無理なのでしょうか??
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-10-19 10:32
XSLTの変換の時点と HTML表示後の時点が違うから
<xsl:attribute name="click">
alert(document.all.objMajTag.value);
</xsl:attribute>
はちょっと変。

XSLTの変換で文字列化して埋め込むのはOK
要素タグの部分は
xsl:text 、&lt; 、name() を使って手書きになるでしょう
DOMでフラグメントをシリアライズするメソッドがあるといいのですが
====================================
XML対応のDBを使うと Query一発で 断片(フラグメント)を取れます
===========================
テキストコマンドでは
# sed -ne "/^<M/,/^<\/M/ p" <<EOF
> <ajTag>
> <a>aaa</a>
> <b>bbb</b>
> <c>
> <d>ddd</d>
> </c>
> </ajTag>
>
> <MajTag>
> <a>aaa</a>
> <b>bbb</b>
> <c>
> <d>ddd</d>
> </c>
> </MajTag>
> <ajTag>
> <a>aaa</a>
> <b>bbb</b>
> <c>
> <d>ddd</d>
> </c>
> </ajTag>
> EOF
#
<MajTag>
<a>aaa</a>
<b>bbb</b>
<c>
<d>ddd</d>
</c>
</MajTag>
でした

[ メッセージ編集済み 編集者: MMX 編集日時 2005-10-19 10:58 ]
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2005-10-19 15:18
>要素タグの部分は
>xsl:text 、&lt; 、name() を使って手書きになるでしょう

やはりそうですか…。
とれたらベストだったのですが、
回り道して別の方法をとることにします。

できないということを知れてかなりスッキリしました!

大変勉強になりました。
ありがとうございました。
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2005-10-20 23:56
xmlデータを埋め込みたいのなら
xmlデータアイランド
とか
microformats の XOXO
とか、が考えられます。
属性値ではなく
Qleon
会議室デビュー日: 2005/10/24
投稿数: 3
投稿日時: 2005-10-24 11:44
XSLTにこだわらず、XMLパーサでDOM使うのはダメですか?
MSXMLなら、子要素全てを順番にGetxml()してやるだけです。
わしこ
常連さん
会議室デビュー日: 2005/10/18
投稿数: 35
投稿日時: 2005-10-27 11:58
MMXさん、Qleonさん、アドバイス本当に有難うございます。
大変勉強になりました。

結局今回は、XMLを取得する際サーブレットで、
タグの<>を&lt;&gt;に変更し、文字列を取得した後戻す
という暫定処置をとりました。

今後多発すると思うので、
教えていただいたことを生かそうとおもいます。
ありがとうございました。

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