1

ストリームオブジェクトがあり、入力ストリームのデータに基づいて、ある種のxmlストリームを使用してxmlを作成および出力したいと考えています。私はストリームをあまり使っていないので、これをできるだけ効率的に行う方法を学ぼうとしています。アイデアは、入力ストリーム全体をメモリにロードしてから、出力ストリーム全体をメモリに作成したくないということです。ある時点で、入力ストリームの少なくとも2倍のサイズがメモリを占有することになります。

入力ストリームでデータが読み取られるときに、xmlストリームが構築され、入力ストリームから読み取られたデータが破棄されるようにする方法が必要です。さらに、xmlストリームが完全に構築されてから渡されるのではなく、構築中にxmlストリームを読み取ることができるように設計したいと思います。誰かがいくつかのコードサンプル、またはこれについて学ぶための良いリソースを持っていますか?

4

4 に答える 4

2

XmlTextReader は、メモリ内ドキュメント オブジェクト モデル (DOM) のオーバーヘッドなしで生データとして XML にアクセスする必要がある場合に使用されます。

XmlTextReader は、XML を読み取るためのより高速なメカニズムを提供します。次のコードは、ストリームから XmlTextReader を読み込みます。

using (XmlTextReader reader= new XmlTextReader (stream)) {

while (reader.Read()) 
{
    switch (reader.NodeType) 
    {
        case XmlNodeType.Element: // The node is an Element.
            Console.Write("<" + reader.Name);
   Console.WriteLine(">");
            break;
  case XmlNodeType.Text: //Display the text in each element.
            Console.WriteLine (reader.Value);
            break;
  case XmlNodeType. EndElement: //Display end of element.
            Console.Write("</" + reader.Name);
   Console.WriteLine(">");
            break;
    }
}


}
于 2009-02-10T04:25:13.517 に答える
1

XML をストリームとして書き出すには、 XmlTextWriterを使用します。

書き込むストリームを与えることができます。これにより、必要なもの (ストリーム出力) が得られ、多くの柔軟性が得られます。使用するストリームを引数としてコードに渡すことで、メモリ ストリームやファイル ストリームなど、XML フォーマット コードが知る必要のないものを接続できます。XmlTextWriter は定期的にデータをフラッシュします (そのため、ストリームからデータを読み取らない限り、残りません)。最後に最終的なフラッシュ/クローズを行うことを忘れないでください。

ストリームは、入力を処理する方法でもあります。その入力を処理し、どの XML 要素を書き込むかを決定できるようになると、XmlTextWriter を使用してそれらを書き込むことができます。そうすれば、それを読み取る相手にそのデータをストリーミングすることができます。そのため、少し読み取り、何らかの処理を行ってから、一度に XmlTextWriter に書き込むループ (またはループ) が発生します。

于 2009-02-10T06:02:03.300 に答える
0

XmlReader.Create メソッドを使用して、XmlReaderObject のインスタンスを作成できます。XmlReaderSettings を使用して XML 設定 (XSD、IgnoreComments など) を指定します。

        XmlReaderSettings settings = new XmlReaderSettings(){
        settings.IgnoreComments = true;
        using (XmlReader reader = XmlReader.Create("Test.xml",settings)){
            while(reader.Read()){

                // Construct/Evaluate XML Here....
            }
            reader.Close();
        }
    }
于 2009-02-10T04:35:43.740 に答える
0

.net 3.5 を使用している場合は、XLINQ を使用できます。これはhttp://blogs.msdn.com/wriju/archive/2007/02/20/xlinq-create-xml-from-object-using-linq.aspxの例です

「xlinq create」でグーグル 検索すると、多くの例が見つかります (おそらく、RSS の例に最も興味があると思います。

var objCust = new[]
{
 new {CustID = 2, CustName = "Sumitra", Phone = "123-123-1236"},
 new {CustID = 3, CustName = "Wriju", Phone = "123-123-1235"},
 new {CustID = 4, CustName = "Writam", Phone = "123-123-1234"},
 new {CustID = 1, CustName = "Debajyoti", Phone = "123-123-1237"}   
};
XElement _customers = new XElement("customers",
                        from c in objCust
                        orderby c.CustID //descending 
                        select new XElement("customer",
                            new XElement("name", c.CustName),
                            new XAttribute("ID", c.CustID),
                            new XElement("phone", c.Phone)
                                            )
                                    );
Console.WriteLine(_customers);

出力は次のようになります。

<customers>
  <customer ID="1">
    <name>Debajyoti</name>
    <phone>123-123-1237</phone>
  </customer>
  <customer ID="2">
    <name>Sumitra</name>
    <phone>123-123-1236</phone>
  </customer>
  <customer ID="3">
    <name>Wriju</name>
    <phone>123-123-1235</phone>
  </customer>
  <customer ID="4">
    <name>Writam</name>
    <phone>123-123-1234</phone>
  </customer>
</customers>
于 2009-02-10T06:31:29.517 に答える