1

私は、いくつかの異なるXMLファイルからデータを取得してそれらを1つに移動するアプリケーションを作成しています。しかし、これを実行しようとすると、何も書き込まれません。私のコードは次のとおりです。

XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xsh);
XmlElement dataElm = xdoc.CreateElement(@"rs:data");
string contents = "";
foreach (var i in Numbers.GetWSnumber())
{
    string curFile = @"\\wwproduction02\public2\Software\PMStatus\Status\WS" + i.WeaverSetId + ".xml";
    if (File.Exists(curFile))
    {
        System.IO.StreamReader file = new System.IO.StreamReader(curFile);
        while ((contents = file.ReadLine()) != null)
        {
            dataElm.InnerText = contents;
            xdoc.DocumentElement.AppendChild(dataElm);
        }
    }
}
xdoc.Save("doc.xml");

私が達成しようとしているXMLの形式は次のとおりです。

<xml> 
<Schema> 
schema data in here 
</Schema> 
<rs:data> 
XML from other files here 
</rs:data> 
</xml>

スキーマは正常であり、他の何かによって処理されています。どんな助けでもこれでありがたいです。ありがとうございました。

4

2 に答える 2

0

最初に行うことは、デバッガーの下でコードをシングルステップして、それが何をしているのかを確認することです。処理するデータが見つからない可能性があります。(たとえば、Numbersは何も返さない、curFileが存在しない、またはcurFileにデータの行が含まれていないなど)。あるいは、プログラムが何かを処理しようとするずっと前に、プログラムが例外をスローしている可能性があります。

デバッガーを使用して、コードが想定どおりに動作していることを確認します。

また、XML要素への参照をドキュメントに追加しています。次に、そのInnerTextを変更し、同じ参照を再度追加して、ドキュメントがあなたを無視している可能性があります。

単一のXMLElementを再利用するのではなく、必要になるたびに新しいXMLElementを作成してみてください。つまり、これらすべてを内側のブロックで一緒に実行します。

XmlElement dataElm = xdoc.CreateElement(@"rs:data");
dataElm.InnerText = contents;
xdoc.DocumentElement.AppendChild(dataElm);
于 2013-01-24T20:15:48.453 に答える
0

明白なことは何も見当たりませんが、私の当面の考え/疑いは、XMLファイルをディスク上に配置していないということです。else句を追加し、現在のファイルが見つからなかったというステートメントを(log4netまたはその他の方法で)ログアウトしてみてください。

if (File.Exists(curFile))
{
    System.IO.StreamReader file = new System.IO.StreamReader(curFile);
    while ((contents = file.ReadLine()) != null)
    {
        dataElm.InnerText = contents;
        xdoc.DocumentElement.AppendChild(dataElm);
    }
}
else 
{
    // log statement that file curFile was not found
}

アップデート

あなたはあなたのを閉じていませんSystem.IO.StreamReader。これがあなたの問題を引き起こしているとは思わないが、あなたは間違いなくI/Oリーダーを閉じたままにしたくない。

System.IO.StreamReader.Close()を呼び出す必要があります

于 2013-01-24T19:05:51.060 に答える