2012-01-27 12 views
0
<row> 
    <id>1</id> 
    <code></code> 
    <name></name> 
    <address></address> 
    <state></state> 
    <zone>?</zone> 
</row> 
<row> 
    <id>2</id> 
    <code>AA</code> 
    <name>Ataria</name> 
    <address>Sitapur National Highway 24, Uttar Pradesh</address> 
    <state>Uttar Pradesh</state> 
    <zone>NER</zone> 
</row> 

私はこのxmlファイルのみの行要素にルート要素がありません。このxmlファイルは、開始および終了します。 このタイプのデータを逆シリアル化する方法in#このタイプのXMLファイルをデシリアライズする方法は?

答えて

0

これは、ではありません。 XMLファイルです。少なくとも、XMLドキュメントではありません。

1つのオプションはは、文書の開始/終了タグを持っている...そして、あなたは、通常の文書としてそれを読み込むことができない新しいファイルにファイルをコピーすることです。ファイルを作成し、ドキュメント開始タグを書き、このファイルの内容をコピーしてから、ドキュメント終了タグを書き、ファイルハンドルを閉じるだけです。あなたはメモリ内でこれを行うことさえできます。

またはをそのままフラグメントとして読み取ることができます。おそらくXmlReaderを介して読み取ることができます。私はそれが私がやったことだとは言えませんが、一般的にXMLファイルを作成することをお勧めします。あなたはルートが欠落すると、あなたのXMLを持つ唯一の問題の1つであることを確認した場合

4

- ちょうどそれを手動で追加します。

string fileContent = File.ReadAllText(path); 
string rawXml = "<root>" + fileContent + "</root>"; 

// now you can use LINQ-to-XML or whatever 
XDocument xdoc = XDocument.Load(rawXml); 
+0

大きなファイルには注意してください。ですから私は@ケビン・キャスカルの答えがはるかに好きです。 – Clemens

+0

'File.ReadAllText'は答えのポイントではありません。ポイントは手作業でルート要素を作成しています – sll

+0

質問はこのXMLフラグメントを読み込み、ルート要素を追加する方法ではありませんでした;-) – Clemens

0

そのないXMLファイルには、ルートを持っていない場合。パーザは、解析しようとするとエラーをスローします。このようにすることができます

<?xml version="1.0"?> 
<Root> 
--- add your file content here 
</Root> 

このファイルパスをパーサーに与えます。

1

はまた、あなたがXElement.Load(...)reader.ReadSubTree()の結果を渡すことによってXElement Sを作成します

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.ConformanceLevel = ConformanceLevel.Fragment; 

using (XmlReader reader = XmlReader.Create("tracelog.xml", settings)) 
{ 
    while (reader.Read()) 
    { 
     // Process each node of the fragment, 
     // possibly using reader.ReadSubtree() 
    } 
} 

を経由して、直接XMLフラグメントをロードすることができます。

関連する問題