|
■No8684 (桃太郎侍 さん) に返信 > こんにちは、初めてこのサイトに書き込みます。 > 宜しくお願いいたします。 > > さて今回僕が困っているのはC#での出力方法です。 > テキストボックス内にある値をXML形式で出力さるのが目的です。 > > 例えば以下のような文章で、正規表現などを織り交ぜて記述していけば > XML形式でテキストに書き出すことは可能ですが、
ももたろさん、あまり良く分かってなくて書いていますね? 場合にもよりますが、正規表現はものを作るよりも、部品を探し出すことに 使われる場合の方が多いですよ。で、結局はその部品を寄せ集めてモノを作 ることになるのですが。
> > 例:writer.Write(textBox1.Text); > > この方法だと見た目もよくなく、
あー、これ、見た目って、ソース中の書き方のこと言っていますね? ソース中にこんな同じ行が何行も現れるのは宜しくないよ、と。
> しかもXMLのレイアウト内容を修正するのにも手間がかかってしまいます。
そーですね。最終的な成果物(XML)とプログラムの構造が対になっていると 直しやすいことはありますが・・・見た目はがっかりもんですねw 出来上がったときの達成感はありますが。
> もっと簡単にXML形式でテキスト内に出力する事は出来ないのでしょうか?
簡単のレベルはどこらへんを妥協点とするかによるかと考えます。 君自身がメンテ不可能なレベルだと、コピペしたはいいけど、誰も触れない、 んじゃ意味無いしw
public function XmlKakou(tb as textbox) as string dim sb as stringbuilder() sb.append("<").append(tb.tag).append(">") sb.append(tb.text).append("</").append(tb.tag).append(">") return sb.tostring end function
例えば、TextBox には、Tag というメンバがありますが、Object 型なんで 何でも適当に突っ込めるのですね。こいつに、XMLのノード名称を入れといて 上記のメソッドでTextBox1.Text の中身を使って、XML文字列を生成する、 なんてことは普通に出来ますね。 TextBox の派生クラスを作って、名前も XmlTextBox とかにして、ツール ボックスに登録してあげれば、誰が使っても、呼び出し規約さえしっかり しとけば、誰がどの画面を担当しても同じXML文字列が生成できるように なったりしますね。
Public Class XmlTextBox : Inherits TextBox private _XmlName as string
public sub New() _XmlName = me.Name + "_x" end sub
Public Property XmlName() As String Get return _XmlName End Get Set(value as string) _XmlName = value end set end property
public overrides function ToString() as String dim sb as new stringbuilder() sb.append("<").append(me._XmlName).append(">") sb.append(me.Text).append("</").append(me._XmlName).append(">") return sb.tostring end function
End Class
でこいつの _XmlName をプロパティエディタ上で必ず設定してね、ってルール を作っておけば、誰でも、こいつを使えば、XMLのことを意識せずに、 XMLの文字列にすることが出来ますね。 <TextBox1_x>あいうえお</TextBox1_x>
ってのが、宜しくないなぁ、と。 <Text1_x value="あいうえお" /> にしたい、なんてときは、
ToString() を修正すれば、全てのこの部品を使っている画面の動作が一斉に変更 出来ますよねw
また、TextBox1_x ってのは、「必ず名前を設定しろ」ってルールに反するので 誰が作った画面で手を抜いているのかすぐに分かりますしね。
んじゃ、これが徒労に終わらないことを祈りつつ・・・ 大抵は、「そーじゃないのです、説明が足りなくて申し訳有りませんでした、実は・・・」 となるのですが、どーでしょうw
|