DOBON.NET DOBON.NETプログラミング掲示板過去ログ

xmlの表示について

環境/言語:[Sqlserver2008+Vb2013]
分類:[.NET]

いつもありがとうございます。教えてください。
他人のDBに保存されたXml型ですがまれに
<?xml version="1.0" encoding="UTF-8"?>の表示がないデータがあります。
自分で検証したのですが
DataContractSerialize + XmlWriter ではencoding="UTF-8"はOmitXmlDeclaration = Trueで表示させなくはできたのですが<?xml version="1.0"?>hは残っております。
XmlSerializer + StreamWriter では何も変更できませんでした。
Version情報はシリアライズする際に省略できるものなのでしょうか?
できるのであれば方法等を教えてください。
  • 題名: Re[1]: xmlの表示について
  • 著者: Hongliang
  • 日時: 2014/08/25 9:34:32
  • ID: 32564
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> DataContractSerialize + XmlWriter ではencoding="UTF-8"はOmitXmlDeclaration = Trueで
> 表示させなくはできたのですが<?xml version="1.0"?>は残っております。

はて?

' ソース
<DataContract> Class Obj
    <DataMember> Public Property Name As String
End Class

Dim serialzier As New DataContractSerializer(GetType(Obj))
Dim ms As New MemoryStream()
Dim settings As New XmlWriterSettings()
settings.OmitXmlDeclaration = True
settings.Encoding = New UTF8Encoding(False)
settings.Indent = True
Dim obj As New Obj() With {.Name = "aaa"}
Using writer As XmlWriter = XmlWriter.Create(ms, settings)
    serialzier.WriteObject(writer, obj)
End Using
Debug.Print("{0}", Encoding.UTF8.GetString(ms.ToArray()))

' 出力結果
<Obj xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://schemas.datacontract.org/2004/07/vbtest">
  <Name>aaa</Name>
</Obj>
  • 題名: Re[1]: xmlの表示について
  • 著者: 魔界の仮面弁士
  • 日時: 2014/08/25 10:33:58
  • ID: 32565
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No32563に返信(yamaさんの記事)
> 他人のDBに保存されたXml型ですがまれに
その XML の処理系実装が不明なので、内容については言及できませんが、
XML というフォーマットの仕様上、encoding が UTF-8 なのであれば、
XML 宣言はあっても無くても同じ事なので、気にする必要はありません;本来は。

> Version情報はシリアライズする際に省略できるものなのでしょうか?
Version情報というのは、XML 宣言中の
version="1.0" の部分の事ですよね? (XML なので大文字小文字に注意!)


> DataContractSerialize + XmlWriter ではencoding="UTF-8"はOmitXmlDeclaration = Trueで表示させなくはできたのですが<?xml version="1.0"?>hは残っております。
残りませんでしたが…?


'Imports System.Runtime.Serialization
'Imports System.Xml
'Imports System.IO
'Imports System.Text

Dim data As New List(Of Integer) From {1, 2, 4, 8, 16}
Using xw = XmlWriter.Create( _
   "C:\temp\sample.xml", _
   New XmlWriterSettings() With {.OmitXmlDeclaration = True, .Indent = True})
 Dim dcs As New DataContractSerializer(data.GetType())
 dcs.WriteObject(xw, data)
 xw.Close()
End Using


==== C:\temp\sample.xml の内容 ====

<ArrayOfint xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
<int>1</int>
<int>2</int>
<int>4</int>
<int>8</int>
<int>16</int>
</ArrayOfint>
■No32563に返信(yamaさんの記事)
> <?xml version="1.0"?>hは残っております。

『表示』という表現を使われていましたよね。ということは、もしかして
保存した XML ファイルを、Internet Explorer で表示していませんか?

だとしたら、その XML ファイルをメモ帳で表示してみて下さい。
元データには「<?xml version="1.0"?>」の表記は無いと思います。
  • 題名: Re[2]: xmlの表示について
  • 著者: yama
  • 日時: 2014/08/26 22:25:07
  • ID: 32573
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No32566に返信(魔界の仮面弁士さんの記事)
> ■No32563に返信(yamaさんの記事)
皆様ご指導ありがとうございました。
色々調べましてメモ帳では表記がないのを確認とれました。
ありごうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板