XSLTを使用したXMLからXMLへの変換で、やり方が分からないのでどなたかお教え願います。
以下にXMLを記述します。
----[入力側]-----
<INPUT>
<IN1>
<old>100</old>
<new>100</new>
</IN1>
<IN2>
<IN21>
<old>200</old>
<new>200</new>
</IN21>
<IN22>
<old>300</old>
<new>300</new>
</IN22>
</IN2>
</INPUT>
----[出力側]-----
<OUTPUT>
<OUT1>
<OUT11>
<old>100</old>
<new>100</new>
</OUT11>
<OUT12>
<OUT121>
<old>200</old>
<new>200</new>
</OUT121>
<OUT122>
<old>300</old>
<new>300</new>
</OUT122>
</OUT12>
</OUT1>
</OUTPUT>
【質問内容】
集団項目でないタグ(入力側のIN1およびIN2)を集団項目として出力したい
No.5ベストアンサー
- 回答日時:
> 入力側のIN1,IN2が複数回繰り返された場合、
> 出力側もOUT1が複数回繰り返されるって感じです。
IN1とIN2が必ず1対1に対応するという条件でいいなら(複数の組が存在しても可)これでいけるでしょう。
IN1およびIN2以下の構造はオリジナルのまま出力されます。
<xsl:template match="INPUT">
<OUTPUT>
<xsl:apply-templates />
</OUTPUT>
</xsl:template>
<xsl:template match="IN1">
<xsl:text disable-output-escaping="yes"><OUT></xsl:text>
<xsl:copy-of select="." />
</xsl:template>
<xsl:template match="IN2">
<xsl:copy-of select="." />
<xsl:text disable-output-escaping="yes"></OUT></xsl:text>
</xsl:template>
MetalKingさん、ありがとうございました。
上手くいきました。
いろいろなご教授ありがとうございました。
最後にもう1つ、ご教授願います。
<xsl:text disable-output-escaping="yes">"><OUT></xsl:text>
xsl:text命令はこれまで何回か使用した事が
あるのですが、属性(disable-output-escaping)は
使用した事がないので個人的にもう少し調べてみようと思っているのですが(text命令だけでなく他も含めて)、MetalKingさんが使用されているHPで「ここは分かりやすくてためになるぞ!!」みたいなHPがありましたら、教えていただきたいのですが...。
MetalKingさん以外の方でも、全然かまいませんので
宜しくお願いいたします。
No.6
- 回答日時:
いろいろと解らないことがあってwebで検索していると、最終的に行き着くのは本家(www.w3.org)だったってことがよくあります。
↓のURLは日本語サイトです。# XSLT は「論よりRUN」で覚えたような気もします...
参考URL:http://www.infoteria.com/jp/contents/xml-data/RE …
No.4
- 回答日時:
#2さんのを少し変えてみました。
参考にしてください。下段に###出力###を書いておきます。
<?xml version="1.0" encoding="Shift_JIS" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="Shift_JIS"/>
<xsl:template match="INPUT">
<OUTPUT>
<OUT1>
<xsl:apply-templates />
</OUT1>
</OUTPUT>
</xsl:template>
<xsl:template match="IN1">
<OUT11>
<xsl:copy-of select="./*" />
</OUT11>
</xsl:template>
<xsl:template match="IN2">
<OUT12>
<xsl:apply-templates/>
</OUT12>
</xsl:template>
<xsl:template match="IN21">
<OUT121>
<xsl:copy-of select="./*" />
</OUT121>
</xsl:template>
<xsl:template match="IN22">
<OUT122>
<xsl:copy-of select="./*" />
</OUT122>
</xsl:template>
</xsl:stylesheet>
###出力###
<?xml version="1.0" encoding="Shift_JIS"?>
<OUTPUT>
<OUT1>
<OUT11>
<old>100</old>
<new>100</new>
</OUT11>
<OUT12>
<OUT121>
<old>200</old>
<new>200</new>
</OUT121>
<OUT122>
<old>300</old>
<new>300</new>
</OUT122>
</OUT12>
</OUT1>
</OUTPUT>
No.3
- 回答日時:
当初、<OUT2>や<OUT3>は無かったようですけど?
提示したコードは
<INPUT> → <OUTPUT> さらに <OUT1> 追加
<IN1> → <OUT11>
<IN2> → <OUT12>
<IN21> → <OUT121>
<IN22> → <OUT122>
となるはずですが
出力のタグ名が変わっているだけで、構造はあってそうな気がしますけど...勘違いしてる?
この回答への補足
アドバイスありがとうございます。
>当初、<OUT2>や<OUT3>は無かったようですけど?
イメージですのでご容赦を...。
>出力のタグ名が変わっているだけで、構造はあってそうな気がしますけど...勘違いしてる?
MetalKingさんは勘違いされていません。
ごめんなさい。私の質問不足です。
もう1つ大事な質問をするのを忘れていました。
入力側のIN1,IN2が複数回繰り返された場合、
出力側もOUT1が複数回繰り返されるって感じです。
[入力]
<INPUT>
<IN1> 1回目
~
</IN1>
<IN2> 1回目
~
</IN2>
<IN1> 2回目
~
</IN1>
<IN2> 2回目
~
</IN2>
<INPUT>
[出力]
<OUTPUT>
<OUT1> ---> この要素が追加(開始:1回目)
<OUT2> ---> IN1に該当(1回目)
~
</OUT2>
<OUT3> ---> IN2に該当(1回目)
~
</OUT3>
</OUT1> ---> この要素が追加(終了:1回目)
<OUT1> ---> この要素が追加(開始:2回目)
<OUT2> ---> IN1に該当(2回目)
~
</OUT2>
<OUT3> ---> IN2に該当(2回目)
~
</OUT3>
</OUT1> ---> この要素が追加(終了:2回目)
<OUTPUT>
たびたびごめんなさい。
これでイメージはつかめるでしょうか?
No.2
- 回答日時:
こういうことでしょうか?
<xsl:template match="INPUT">
<OUTPUT>
<OUT1>
<xsl:apply-templates />
</OUT1>
</OUTPUT>
</xsl:template>
<xsl:template match="IN1">
<OUT11>
<xsl:copy-of select="./*" />
</OUT11>
</xsl:template>
<xsl:template match="IN2">
<OUT12>
<xsl:copy-of select="./*" />
</OUT12>
</xsl:template>
<xsl:template match="IN21">
<OUT121>
<xsl:copy-of select="./*" />
</OUT121>
</xsl:template>
<xsl:template match="IN22">
<OUT122>
<xsl:copy-of select="./*" />
</OUT122>
</xsl:template>
この回答への補足
回答ありがとうございます。
もう少しなのですが...。
私のイメージとしましては、こんな感じです。
値は省略します。
[入力]
<INPUT>
<IN1>
~
</IN1>
<IN2>
~
</IN2>
<INPUT>
[出力]
<OUTPUT>
<OUT1> ---> この要素が追加(開始)
<OUT2> ---> IN1に該当
~
</OUT2>
<OUT3> ---> IN2に該当
~
</OUT3>
</OUT1> ---> この要素が追加(終了)
<OUTPUT>
いろいろアドバイスをいただき誠にありがとうございます。
よろしければもう少しご教授願います。
No.1
- 回答日時:
IN1 IN2 を含む構造(OUT1)を追加したいだけでしょうか?
<xsl:template match="INPUT">
<OUTPUT>
<OUT1>
<xsl:apply-templates />
</OUT1>
</OUTPUT>
</xsl:template>
以下省略
この回答への補足
説明足らずで申し訳ありません。
正確に言いますと、
OUT1配下にOUT11とOUT12を作成しますが、そのOUT12配下にIN1とIN2(出力側でいうところのOUT121,OUT122)の要素を設定したいという事です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 英語 One out of four people will be 70 years old or mor 8 2022/08/12 00:48
- 英語 高校英語の問題 1 2023/05/23 15:29
- 英語 課題でこの英語の文章のSVOの分析や()等の括りを出されたため、できるだけ完璧にしたいのですが、自身 1 2022/12/16 13:29
- 英語 The old man whom she is taking care of is her fath 8 2022/10/01 14:39
- 英語 私の車は、購入してから7年目になるが、これまでに車検を3回受けた。の英訳 11 2022/06/13 03:39
- 英語 できるだけ直訳で英語の翻訳をお願いします。(英語→日本語) 1 2022/10/15 20:59
- 英語 英語の問題でどう解いたらよいか分からないものがあります。教えていただけませんか?接続詞の単元です。 2 2023/06/18 15:45
- 英語 この英語の意味わかる人いませんか? 1 2022/04/09 13:39
- 戸籍・住民票・身分証明書 今日はJAにブロックしてフラれ 2 2022/05/28 09:01
- C言語・C++・C# [至急]Project Euler:#17Number letter countsコード入力出力解説 2 2022/09/24 02:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
XSLで、XMLの空タグを制御したい。
-
XMLをXSLを使いHTMLに変換した...
-
XMLのHTMLへの変換 (初心者)
-
タグの有無の判定
-
スタイルシートを使用したXM...
-
XSL中の改行、タブを無効にした...
-
xmlのテキストにリンクを張りた...
-
u_shortなどの省略した宣言につ...
-
CPUの考え方を教えてください ...
-
東芝のDynabookなのですがアン...
-
ルート要素ノードが2個ある場合?
-
あるノードリストに、特定の名...
-
XMLで要素が記述された順番に意...
-
UTF-8でエンコーディングとはど...
-
VBSでxmlの値を書き換えたい
-
SNMP リンクダウンとノードダ...
-
双方向リストの関数
-
XMLで特殊文字を扱うにはどうし...
-
Windowsで見かけるxmlファイル...
-
XML同じ名前の要素を自動で集約...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タグの有無の判定
-
XSLTで固定長データファイルを...
-
XSLTにてタグ名を取得する方法
-
XSLで、XMLの空タグを制御したい。
-
xmlの属性が重複しているのをx...
-
ノードの並び替え
-
XSL中の改行、タブを無効にした...
-
XMLのHTMLへの変換 (初心者)
-
xmlのテキストにリンクを張りた...
-
XMLをXSLを使いHTMLに変換した...
-
重複するものを消したい
-
空かスペースを認識させること...
-
スタイルシートを使用したXM...
-
XSLTがブラウザで表示されません。
-
XSL内でJavaScriptを記述し、Ja...
-
XMLとXSLTでリンクを張る方法
-
VBAからxml・スタイルシートを...
-
うまく表示されない
-
XML,XSL,JavaScriptの連携
-
XSLでの指定方法
おすすめ情報