XMLデータの中の改行コードについて

このQ&Aのポイント
  • XMLデータの中で改行コードの表現方法について疑問があります。
  • Windows2K VC++6.0 msxml3.dll 環境でXMLデータ処理をしていますが、改行コードが変換されてしまう問題が発生しています。
  • XMLDOMを使用してデータを取得する際、改行コードが正しく取得されない原因について調査中です。
回答を見る
  • ベストアンサー

XMLデータの中の改行コードについて

Windows2K VC++6.0 msxml3.dll 環境でXMLデータ処理をしています。 XMLデータ <aa> <Data>内容</Data> </aa> pXMLDom->getElementsByTagName(L"Data", &NodeList); pIDOMNodeList->get_item(0, &Node); Node->get_text(&bstrText); XMLDOMを用いて<Data>内容</Data>のデータを取ると『内容』が取れますが、内容の中で【改行コード(CRLF(10進数13,10))】が『LF(10)』になってしまいますが、 どうしてでしょうか。

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

  • ベストアンサー
  • BILLY-J
  • ベストアンサー率57% (60/105)
回答No.1

こんばんは。 データ中にCR+LFが有ると、パーサーで取り出した時にLFだけに 変換される。これXMLの仕様です。 W3CによるXML1.0勧告で決められちゃってます。 でもこの文字列をWinの世界で使うのは少々不便ですよね。 私が以前に使った時は、結局自分でLF→CR+LF変換処理をを書いて しまいました。

参考URL:
http://www.y-adagio.com/public/standards/xml/xmlmain.htm#sec-line-ends
jaekuk
質問者

お礼

ご回答有難うございます。 XMLプロセッサーの仕様がそうなっているので、プログラムの側で変換処理をするしかないですね。 有難うございました。

関連するQ&A

  • VBscriptでXMLデータの抽出に関する質問

    教えて下さい。以下のようなXMLファイルがあります。 <?xml version="1.0" encoding="Shift-JIS"?> <ROOT> <INFO> <NO>0001</NO> <NAME>ABC</NAME> <COMMENT> </COMMENT> <AGE>30</AGE> </INFO> </ROOT> これを以下のようにVBScriptにてデータを取り出したいです。 Dim DOM, docRoot, node, nodeList, i, m Dim objADO, objADO2 Dim objRS Dim sqlstmt, strSQL Dim no, comment 'DOMオブジェクト生成 Set DOM = CreateObject("Microsoft.XMLDOM") '同期モード DOM.async = True 'XMLを読み込む DOM.load("11.xml") 'ルートセット Set docRoot = DOM.documentElement 'ノードの設定 Set nodeList = docRoot.selectNodes("/ROOT/INFO") 'ループ For Each node In nodeList For i = 0 to node.ChildNodes.length - 1 Select case node.childNodes(i).nodeName case "NO" no = node.childNodes(i).firstChild.nodeValue case "COMMENT" comment = node.childNodes(i).firstChild.nodeValue End select Next Next ところがCOMMENTタグのようにデータが空のものがあると 「オブジェクトがありません」とエラーになります。 if Not IsNull(node.childNodes(i).firstChild.nodeValue) then というようにもやってみましたが、これでも同じエラーとなってしまいます。 何か方法はないでしょうか?アドバイスを宜しくお願いします。

    • ベストアンサー
    • XML
  • 改行コードの謎

    現在、VisualStudioを使ってCプログラムを作成してるのですが、ファイルについて質問があります。 あるテキストデータをfopen()でオープンし、その後fread()を使ってデータを取得しそのメモリをデバッガで参照すると改行がLFのみになっているですがこれはなぜなのでしょうか? バイナリエディタで参照すると改行はCRLFなのですが...。

  • MSXMLでXMLファイルの読込みについて(改行によるエラー)

    はじめまして、最近MSXMLを使った仕事をしています。 本日いろいろテストしていたのですが、タグ間の改行の入り具合によってXMLファイルがうまく読み込めない場合があります。 具体例としまして 1)要素ごとに改行されている場合 -> 成功します。 <A> <B> ... </B> </A> 2)改行無しの場合 -> 失敗します。 <A><B>...</B></A> 3)中途半端に改行が入る場合 -> 失敗します。 <A><B> ...</B> </A> 4)ルートタグ以外を一行で記述 -> 成功します。 <A> <B>...</B> </A> XMLファイルを生成するところできちんと整形すればエラーは起きないようにプログラムを作成できるのですが、どうも納得がいきませんしあまり良い製品とはいえません。このような現象にあわれた方アドバイス宜しくお願いします。 解決法がわからなくともこのような現象があるかどうかわかるだけでも参考になります。dllのバージョンはmsxml4.dllです。(MSXML4.0SP2をinstall) 宜しくお願いいたします。m(_ _)m

  • XMLの要素の内容の中に要素

    VisualBasic6.0にて、XMLを作成するプログラムを作っています。 XMLの作成、編集はMSXMLを使用しており、編集保存はできたのですが、下記のような要素の出力の仕方がわかりません。 <Node1>  あいうえお  <Node1-1>abcde</Node1-1>  かきくけこ </Node1> このように要素の文字列の途中に子要素を作成したいです。 「Node1」要素に、子要素「Node1-1」を追加するサンプルです。 Cドライブ直下に以下の内容のXMLファイル「test.xml」を作成 <?xml version="1.0" encoding="shift_jis"?> <Node1> </Node1> VB6にて、参照設定に「Microsoft XML V6.0」を追加し以下のコードを作成。 Private Sub Command1_Click() Dim xDoc As MSXML2.DOMDocument Set xDoc = New MSXML2.DOMDocument Dim node As IXMLDOMNodeList Dim Addnode As IXMLDOMNode Dim obj As IXMLDOMNode If xDoc.Load("C:\test.xml") Then Set node = xDoc.documentElement.selectNodes("/Node1") For Each obj In node Set Addnode = obj.appendChild(xDoc.createNode(NODE_ELEMENT, "Node1-1", "")) Addnode.Text = "abcde" Next xDoc.save ("C:\test.xml") End If Set xDoc = Nothing End Sub

  • XMLで改行させたい

    Adobe Dreamweaver CS3でSpryの機能を使ってxmlからのデータを表示させたいと思っています。xmlの内容を改行させて表示したいのですが、可能でしょうか?全体的な流れとしては、phpファイルからフォームによって送信したものをxmlファイルに書き出して、それをサイトで表示したいと思っています。よろしくお願いいたします。

    • ベストアンサー
    • XML
  • XMLのXPathについて

    下記のようなXMLがあるとして、XPathでdataノードを取得する場合、 /root/node/dataと/root/dataの二通りがあると思いますが、これを一つにまとめて書くことは可能でしょうか? また、dataノードに辿りつくのに、途中のパスがすべて把握できない場合(/root/AAA/data、/root/BBB/CCC/data。。。) XPathでdataノードを取得することができますでしょうか? GetElementsByTagName("data")にした方が良いでしょうか? <?xml version="1.0" encoding="UTF-8"?> <root> <node> <data>データ1です</data> </node> <node> <data>データ2です</data> </node> <data>データ3です</data> </root>

    • 締切済み
    • XML
  • xmlの値を配列に格納したいんですけどエラーがでてしまう。

    <?xml version="1.0" encoding="UTF-8" ?> <Dataroot> <aaa> <bbb> <ccc>値1</ccc> </bbb> <bbb> <ccc>値2</ccc> </bbb> </aaa> </Dataroot> ---------------------------------------------------------------- のようなXML文書がある時<ccc></ccc>の値を取り出す場合 ---------------------------------------------------------------- Imports System Imports System.IO Imports System.Xml public class Sample public shared sub Main() Dim doc as XmlDocument = new XmlDocument() doc.Load("data.xml") 'XML文書の読み込み Dim root as XmlElement = doc.DocumentElement Dim nodeList as XmlNodeList nodeList = root.SelectNodes("/Dataroot/aaa/bbb")'/cccまでやる方が簡単 Dim node as XmlNode Dim ccclist() As String = Nothing for each node in nodeList ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し next end sub end class としているのですが ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し この行で オブジェクト参照がオブジェクト インスタンスに設定されていません。 とエラーがでて困っています。 これはどのように修正すればよろしいでしょうか? 教えてください。お願いします。

  • vb6 XMLファイル出力について<S></S>

    vb6にてXMLファイル出力のプログラムを作成しています。 XMLファイル内容 <?xml version="1.0" encoding="UTF-8"?> <root> <key>AA</key> <string>aa</string> <key>BB</key> <string/> </root> 上記の<string/>の部分を<string></string>のように出力したいのですが、 どうしても上手くいきません。 下記にソースを記載します。 何か少しでもお分かりになる情報がありましたらご教授願いします。 よろしくお願いします。 Dim xmlDoc As MSXML2.DOMDocument 'XMLドキュメント Dim xmlPI As IXMLDOMProcessingInstruction 'XML宣言 Dim node(50) As IXMLDOMNode '要素 Dim attr As MSXML2.IXMLDOMAttribute '属性 'XMLドキュメントを作成 Set xmlDoc = New MSXML2.DOMDocument 'XML宣言を追加 Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")) '<root>要素を追加 Set node(1) = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "root", "")) '<key>要素を追加 Set node(2) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(2).Text = "AA" '<string>要素を追加 Set node(3) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(3).Text = "aa" '<key>要素を追加 Set node(4) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "key", "")) node(4).Text = "BB" '<string>要素を追加 Set node(5) = node(1).appendChild(xmlDoc.createNode(NODE_ELEMENT, "string", "")) node(5).Text = "" 'XMLドキュメントの出力 Dim strXMLFile As String strXMLFile = Format(Date, "yyyymmdd") & Format(Time, "hhmmss") xmlDoc.save ("C:TEST\TEST.xml") '終了処理 If Not xmlDoc Is Nothing Then Set xmlDoc = Nothing If Not xmlPI Is Nothing Then Set xmlPI = Nothing

  • xmlファイル(UTF-8)への書き出し時の改行

    こんばんわ。 息詰ってしまったので質問をさせていただきます。 無理矢理な書き方をしているのがいけないのか PHPからXMLファイルへ書き出しをすると改行として認識されず文字として認識されてしまいます。 どのたかご存じの方がいましたらアドバイスをお願いします! ■index.php(UTF-8、LF) //書き出しに関してのスクリプトです。 $xmlfile="xml/samplexml.xml(xmlファイルまでのパスとxmlファイル名)"; //xmlに書き出しデータ作成 $xmldata = "<xmldata><データ>データだよ</データ><果物>いちご</果物><野菜>キュウリ</野菜></xmldata>"; $fp = @fopen($xmlfile , "a") or err_msg("XMLが開けません。"); flock($fp , LOCK_EX); fputs($fp , $xmldata . "\n"); flock($fp , LOCK_UN); fclose($fp); ■samplexml.xml(UTF-8、LF) <?xml version="1.0" encoding="UTF-8"?> <xmldata><データ>データだよ0</データ><果物>ばなな</果物><野菜>キャベツ</野菜></xmldata> ※ここに改行をさせてデータを追加したい。。 上のスクリプトの結果は改行されずに「\n」も文字として改行されずに追加されてしまう。(「\n\r」「\r」でもテストをしてみたのですが結果は同じでした。)

    • ベストアンサー
    • PHP
  • XML::XPathを使う

    エラーがでて期待する出力が出ず困っています。 ファイル名とXPathのコマンドライン引数をとり、 指定されたパスに一致するノードを出力するものです。 (参考書の写しなので、記述ミスはないと思います。) ■grabber.pl use XML::XPath; use XML::XPath::XMLParser; my $xpath = XML::XPath->new( filename => shift @ARGV ); my $nodeset = $xpath->find( shift @ARGV ); foreach my $node ( nodeset->get_nodelist ) { print XML::XPath::XMLParser::as_string( $node ) . "\n"; } コマンドラインに入力しているものは、 perl grabber.pl data.xml "/inventory/category/item/name" ■data.xml <?xml version="1.0"?> <inventory date="2001"> <category> <item id="2"> <name>aaaa</name> </item> </category> </inventory> です。 perl grabber.pl data.xml "/inventory/category/item/name" としても、下記にエラーが出ます。 Can't locate object method "get_nodelist" via package "nodeset" (perhaps you for got to load "nodeset"?) at grabber.pl line 5. いろいろ試してみたり調べたのですが、 行き詰ってしまいました。 期待する出力は"<name>aaaa</name>"なのですが・・・ どなたかこのエラーの原因がおわかりになるかた いらっしゃいますでしょうか。 環境は以下になります。 ・windowsxp ・activePerl モジュールのインストール済み ・XML-XPath ・XML-Parser 以上です。

    • ベストアンサー
    • Perl

専門家に質問してみよう