• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ルート要素ノードが2個ある場合?)

ルート要素ノードが2個ある場合?

このQ&Aのポイント
  • xmlからxmlへの変換時に出るエラーについての質問です。
  • 元データとなるxmlがルート要素の要素ノードが2つあるものです。
  • 現在は元データに、<root>ノードを最上位に加えることにより、変換しているのですが、他の方法で対処できないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nadera
  • ベストアンサー率83% (5/6)
回答No.3

ルートノードが一つに限られるのは,整形式のXMLでは絶対の基本です。 なので,ルートノードを付け加えないと,xsltでの変換はできません。 ただ,質問のようなXMLはfragment(フラグメント,断片)と言い,XMLを解析して操作するソフトをXMLパーサと言いますが,DOMを扱えるパーサであれば,フラグメントを読み込んで,ルートノードを付け加えるなどの処理をして,xsltで変換するなどが可能かもしれません。 なおxalanは,小生は使ったことがありませんので,このような処理が可能かどうかは分かりません。 あるいは,XMLは,単なるテキストファイルなので,プログラム的にルートノードを付加することも難しくはないので,フラグメントの読み込みなどよりも,テキストとして読み込んで処理するほうが簡単かもしれません。

snlsnr
質問者

お礼

コメントありがとうございます。 DOMですか、そちらも勉強してみます。 確かにルートノードをつけてしまえば変換できるので、付け加える方法を考えてみたいと思います。

その他の回答 (2)

  • kuma8055
  • ベストアンサー率28% (27/94)
回答No.2

XML初心者で逆質問のようになってしまいますが、そもそもXML文書は複数のルートノードが許されるのでしょうか? XSLTでは正しいXML文書とみなされないためにエラーが起きているということはないでしょうか? 以前にどこかで、同じ質問(「ドキュメントの末尾に…」のエラーが発生する)をされている方がいて、回答に「ルートノードがないせいです」と付いているのを見た覚えがあります。

snlsnr
質問者

お礼

コメントありがとうございます。 私も初心者ですから断定は出来ませんが、XMLでは許されない記述ルールだと思います。 ドキュメントの末尾に…のエラーは<A2>が存在することにより出ているので、原因はそこにあると認識しています。 ただ元データの形式はこちらで変更することができないものでして、何とかXSLTで変換出来ないかと思いまして、こちらで質問した次第です。 やはりXSLTだと原則に反しているので無理なのでしょうか。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

現在の不具合が出ているxsltなどを提示したほうが回答が付きやすいかと思います どのように変換したくて、どんなエラーに見舞われているとかを具体化しましょう

snlsnr
質問者

お礼

コメントありがとうございます。 使用している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): ドキュメントの末尾に不正な文字 &#x3c; があります。 元のxmlを下記のようにすると問題なく通ります。 <root> <A1>    <B1>aaa</B1>    <B2>      <C1>bbb</C1>    </B2> </A1> <A2>ccc</A2> </root>

関連するQ&A