C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: Java で XMLシリアライズ


(過去ログ 95 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■57073 / inTopicNo.1)  Java で XMLシリアライズ
  
□投稿者/ Basilico (1回)-(2011/02/11(Fri) 01:20:39)

分類:[Java] 

こんにちは、お初にお目にかかります。
最近 Java をはじめて、XMLシリアライズで思うような結果が得られず
四苦八苦しています。
どなたかアドバイスを頂けないでしょうか。


[やりたい事]

<CustomObject>
 <Value>
  <Hoge>ほげ</Hoge>
  <Fuga>ふが</Fuga>
 </Value>
</CustomObject>

上記のXMLを下記のようなクラスにマッピング。

// Java
class CustomObject
{
 private String Value;

 public void setValue(String value)
 {
  Value = value;
 }

 public String getValue()
 {
  return Value;
 }
}

デシリアライズ後に getValue() した結果、文字列として
「<Hoge>ほげ</Hoge><Fuga>ふが</Fuga>」
を取得したいです。

条件として、元のXMLでは「&lt;」等のエスケープはされていません。
また、CustomObject クラスをシリアライズした際に元通りのXMLにな
るようにしたいです。

DOM とかのパーサーを使ってゴリゴリすれば可能でしょうが、できれ
ば JAXB を使って marshal/unmarshal したいです。



初投稿のため、勝手が分からずご無礼があるかもしれませんが、ご容
赦下さい。
よろしくお願いいたします。

引用返信 編集キー/
■57074 / inTopicNo.2)  Re[1]: Java で XMLシリアライズ
□投稿者/ Basilico (2回)-(2011/02/11(Fri) 01:24:04)
連続で書き込みすみません。
ちなみに C# だと下記のようなコードで実現できます。


    class Program
    {
        static void Main(string[] args)
        {
            CustomObject custom = null;

            // Deserialize
            using (StreamReader sr = new StreamReader("rCustomObject.xml", Encoding.GetEncoding("utf-8")))
            {
                XmlSerializer xs = new XmlSerializer(typeof(CustomObject));
                custom = xs.Deserialize(sr) as CustomObject;
            }

            Console.WriteLine(custom.Value);

            // Serialize
            using (StreamWriter sw = new StreamWriter("wCustomObject.xml", false, Encoding.GetEncoding("utf-8")))
            {
                XmlSerializer xs = new XmlSerializer(typeof(CustomObject));
                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                ns.Add("", "");
                xs.Serialize(sw, custom, ns);
            }
        }
    }

    public class CustomObject : IXmlSerializable
    {
        public string Value { get; set; }

        XmlSchema IXmlSerializable.GetSchema()
        {
            return null;
        }

        // Deserialize
        void IXmlSerializable.ReadXml(XmlReader reader)
        {
            while (reader.Read())
            {
                if (reader.Name.Equals("Value"))
                    Value = reader.ReadInnerXml();
            }
        }

        // Serialize
        void IXmlSerializable.WriteXml(XmlWriter writer)
        {
            using (StringReader sr = new StringReader("<Value>" + Value + "</Value>"))
            {
                using (XmlReader xr = XmlReader.Create(sr))
                {
                    writer.WriteNode(xr, true);
                }
            }
        }
    }

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -