xmlからxmlへの変換時に出るエラーについての質問です。
元データとなるxmlが下のような構造をしています。
ルート要素の要素ノードが2つあるものです。
<A1>
<B1>aaa</B1>
<B2>
<C1>bbb</C1>
</B2>
</A1>
<A2>ccc</A2>
これをxsltで違う形のxmlに変換するのですが、変換中にエラーが出てしまいます。
(使用しているのはApache xalanです)
現在は元データに、<root>ノードを最上位に加えることにより、変換しているのですが、他の方法で対処できないでしょうか?
よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
ルートノードが一つに限られるのは,整形式のXMLでは絶対の基本です。
なので,ルートノードを付け加えないと,xsltでの変換はできません。
ただ,質問のようなXMLはfragment(フラグメント,断片)と言い,XMLを解析して操作するソフトをXMLパーサと言いますが,DOMを扱えるパーサであれば,フラグメントを読み込んで,ルートノードを付け加えるなどの処理をして,xsltで変換するなどが可能かもしれません。
なおxalanは,小生は使ったことがありませんので,このような処理が可能かどうかは分かりません。
あるいは,XMLは,単なるテキストファイルなので,プログラム的にルートノードを付加することも難しくはないので,フラグメントの読み込みなどよりも,テキストとして読み込んで処理するほうが簡単かもしれません。
コメントありがとうございます。
DOMですか、そちらも勉強してみます。
確かにルートノードをつけてしまえば変換できるので、付け加える方法を考えてみたいと思います。
No.2
- 回答日時:
XML初心者で逆質問のようになってしまいますが、そもそもXML文書は複数のルートノードが許されるのでしょうか?
XSLTでは正しいXML文書とみなされないためにエラーが起きているということはないでしょうか?
以前にどこかで、同じ質問(「ドキュメントの末尾に…」のエラーが発生する)をされている方がいて、回答に「ルートノードがないせいです」と付いているのを見た覚えがあります。
コメントありがとうございます。
私も初心者ですから断定は出来ませんが、XMLでは許されない記述ルールだと思います。
ドキュメントの末尾に…のエラーは<A2>が存在することにより出ているので、原因はそこにあると認識しています。
ただ元データの形式はこちらで変更することができないものでして、何とかXSLTで変換出来ないかと思いまして、こちらで質問した次第です。
やはりXSLTだと原則に反しているので無理なのでしょうか。
No.1
- 回答日時:
現在の不具合が出ているxsltなどを提示したほうが回答が付きやすいかと思います
どのように変換したくて、どんなエラーに見舞われているとかを具体化しましょう
コメントありがとうございます。
使用しているxslは下記のような物です。
子要素を持たない要素を出力するものです。
<?xml version="1.0" encoding="EUC-JP"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output encoding="EUC-JP" method="xml" indent="yes" />
<xsl:template match="*">
<xsl:choose>
<xsl:when test="count(*) = 0">
<xsl:copy-of select="." />
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="*" />
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
その際に下記エラーが発生し、変換することが出来ません。
file:///D:/***.xml; 行番号8; 列番号-1; XSLT エラー (javax.xml.
transform.TransformerException): ドキュメントの末尾に不正な文字 < があります。
元のxmlを下記のようにすると問題なく通ります。
<root>
<A1>
<B1>aaa</B1>
<B2>
<C1>bbb</C1>
</B2>
</A1>
<A2>ccc</A2>
</root>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Excel(エクセル) 至急です><Excelの関数を教えてください。 2 2022/03/22 17:56
- Excel(エクセル) EXCEL 行内のデータを2行に分けて、表を作り直したいのです。教えてください。 5 2023/06/25 14:00
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
- その他(IT・Webサービス) 見たことのない形式で日付が表示されているのでそれを解析してほしい 3 2023/01/23 16:53
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- Excel(エクセル) エクセル シート内のボックスを縦並びから横並びに 7 2023/04/05 04:28
- Excel(エクセル) Countifよりも早く重複数をカウントする方法ありますか? 18 2022/07/04 13:39
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
このQ&Aを見た人はこんなQ&Aも見ています
-
カンパ〜イ!←最初の1杯目、なに頼む?
飲み会で最初に頼む1杯、自由に頼むとしたら何を頼みますか? 最初はビールという縛りは無しにして、好きなものを飲むとしたら何を飲みたいですか。
-
一回も披露したことのない豆知識
あなたの「一回も披露したことのない豆知識」を教えてください。 「そうなんだね」と「確かに披露する場所ないね」で評価します。
-
忘れられない激○○料理
これまでに食べたもののなかで、もっとも「激○○」だった料理を教えて下さい。 激辛、でも激甘でも。 激ウマ、でも激マズでも。
-
2024年のうちにやっておきたいこと、ここで宣言しませんか?
2024年も残すところ50日を切りましたね。 ことしはどんな1年でしたか? 2024年のうちにやっておきたいこと、 よかったらここで宣言していってください!
-
【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
【お題】 ・このサンタクロースは偽物だと気付いた理由とは?
-
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
C# ReadOnlyのTextBoxで
C言語・C++・C#
-
XMLのタグ名の禁則文字
XML
-
-
4
同じタグ名の項目取得
XML
-
5
System.IO.Directory.GetFilesの順番
Visual Basic(VBA)
-
6
テーブルタグの中にdivを含めてはダメ?
HTML・CSS
-
7
C#でのbatファイル実行結果取得
その他(プログラミング・Web制作)
-
8
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
9
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
複数のマックPCによる数値計算...
-
SNMP リンクダウンとノードダ...
-
同じタグ名の項目取得
-
昔Winnyってありましたけど、あ...
-
【vb6】イメージリストに対する...
-
ノードとは
-
vbsのDOMDocumentで要素のText...
-
あるノードリストに、特定の名...
-
TreeViewの再表示のちらつきを...
-
Ciscoルータやスイッチを使用し...
-
XML文書の指定した属性値を持つ...
-
C:経路検索アルゴリズム
-
VBSでxmlの値を書き換えたい
-
Excel-VBAでXMLの複数ノードの...
-
動的な構造体配列の初期化
-
VBSでXMLを読込、検索結果をテ...
-
特殊記号が勝手にエスケープさ...
-
XMLで要素が記述された順番に意...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CPUの考え方を教えてください ...
-
SNMP リンクダウンとノードダ...
-
ルート要素ノードが2個ある場合?
-
昔Winnyってありましたけど、あ...
-
同じタグ名の項目取得
-
あるノードリストに、特定の名...
-
C#でTreeViewのCheckBoxのサイ...
-
ノードとは
-
C#でtreeviewの指定ノードを選...
-
TreeView の初期表示について
-
2分探索木の高さを求めるプロ...
-
ツリービューのノードをダブル...
-
C# TreeView 効率良いノード追...
-
C言語:文字列の並び替え
-
VB6.0でDOMを使用して...
-
TreeViewで複数ノードの選択は...
-
TreeViewに重複する値をセット
-
replaceChildメソッドについて
-
各ノードの行数取得
-
ツリービューを閉じさせたくない。
おすすめ情報