- - PR -
文字列データのXMLシリアライズについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-02-03 22:02
XmlSerializerを使用して何かのStringのメンバを含むオブジェクトをシリアライズ
した場合、当然Stringのメンバの値の文字列に「<」などが含まれていた場合、シリアライズごのXMLでは「<」などへ変換されますが、この場合と全く同じ規則で文字列のエンコード処理を行ってくれる関数などはないでしょうか。 私のイメージとしては、HttpUtility.HtmlEncode関数と同じような関数がどこかにあると思うのですが・・・ どなたがご存知の方がいらっしゃいましたらお教えください。 | ||||||||||||
|
投稿日時: 2005-02-03 23:26
諸農です。
申し訳ないです。論旨が良く判りませんでした。
このクラスメソッドが使えない理由、というか問題点とは どういったものなんでしょうか? _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2005-02-04 19:45
説明が足りなくて申し訳ありませんでした。
例えば以下のように宣言されたString配列があるとします。 String[] sArray = new string[]{"<",">","&"," ", "¥0" }; この配列をXmlSerializerを使用してシリアライズした場合、以下のようなXMLとなります。 <?xml version="1.0"?> <ArrayOfString xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <string>&lt;</string> <string>&gt;</string> <string>&amp;</string> <string> </string> <string>&#x0;</string> </ArrayOfString> そして、プログラムの中でこのXMLをStringとして読み込み、その中の値に 特定の値が含まれているかどうかチェックする処理を行いたいのですが、その際に Xmlパーサの使用や、XMLデシリアライズなどは行わずに直接XML内の検索を行おうと考えており、 XMLの中から検索したい文字が、"<"であれば"&lt;"へ、"¥0"であれば"�"のように変換 を行ってから検索をおこなわないと正しい検索結果が得られないと思います。 そこで、上記のような変換を行ってくれる関数を探しているのですが、HttpUtility.HtmlEncodeでは "<"、">"、"&"などは"&lt;"、"&gt;"、"&amp"へ変換してくれましたが、"¥0"は特に変換されずそのまま の値で、"�"へは変換してくれませんでした。 そのため、XmlSerializerがオブジェクトをXMLへ変換する際に、string値をエンコードする処理と 同じ結果を返す関数は無いかと探しております。 ※ "&lt;"等を半角で入力すると自動的に">"へ変換されてしまったため、苦し紛れに全角で入力しました。 [ メッセージ編集済み 編集者: チョフ 編集日時 2005-02-04 20:23 ] [ メッセージ編集済み 編集者: チョフ 編集日時 2005-02-05 00:34 ] | ||||||||||||
|
投稿日時: 2005-02-06 02:22
諸農です。
こうすることに何か理由があるのですか? 理由がないのでしたら、XmlDocument使う方が楽だと思います。 あ、でもspaceはstring.Emptyになるのかな。
codeタグ使えば大丈夫ですよ。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||||||
|
投稿日時: 2005-02-14 20:19
返事が遅くなり申し訳ありませんでした。
サンプルのご提示ありがとうございました。
処理を組み込もうとしている部分が、パフォーマンスを意識しなければならない部分のため、 なるべく軽い処理にしようと考えていたためです。 そして、検索対象となる文字も
XMLへ変換した場合に
直接、XMLから検索すればよいと考えていました。 しかし、この方法だとXMLに変換した場合に特にエンコードされない文字を検索しようとした場合は タグ名などでヒットする可能性もあるのでだめそうですね・・・。 やはり、ご提示いただいたサンプルのようにパーサを使用したほうが良さそうですね。 [ メッセージ編集済み 編集者: チョフ 編集日時 2005-02-14 20:20 ] | ||||||||||||
|
投稿日時: 2005-02-15 02:15
大して数もないので1回自作してしまうと楽ですよ。
ご参考までに。 http://ash.or.jp/java/htmlencode.htm | ||||||||||||
|
投稿日時: 2005-02-15 16:14
そして、検索対象となる文字も
コード: "\0" のような制御コードが設定されることを想定しているため、 XMLへ変換した場合に コード: "\0" → "�" のように何らかのエンコードがされることから、変換後の値を 直接、XMLから検索すればよいと考えていました。 -------------------------------- ???????????????? XML1.0 [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ XML1.1 [2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ [2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F] バイトのゼロは整形式の文字じゃないので、どのXMLエディタでもすぐ警告される でしょう。パーサーは警告出すか、握りつぶすか?、CDATAにも入りません。 バイナリーXML の「救い」を祈るしかないのでは。 XMLは最初に文書指向の人々が立ち上げた物ですから 本当は、バイナリーデータの標準パッケージを求めていた、 データ指向の人にはいまいち満足いかないのかも. HTTP で通りがよい は別にして [ メッセージ編集済み 編集者: MMX 編集日時 2005-02-15 17:37 ] |
1