如何反序列化这种类型的xml文件?

时间:2012-01-27 10:14:49

标签: c# xml xml-serialization xml-deserialization

<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文件中没有root元素只有row元素开始和结束这个xml文件。 如何反序列化这类数据?在c#

4 个答案:

答案 0 :(得分:4)

如果您确定缺少root只是XML的一个问题 - 只需手动添加:

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

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

答案 1 :(得分:1)

您还可以通过

直接加载XML片段
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()
    }
}

您可以通过将XElement的结果传递给reader.ReadSubTree()来创建XElement.Load(...)

答案 2 :(得分:0)

首先,它是不是 XML文件 - 或者至少,它不代表XML文档。

一种选择是将文件复制到文件中, 具有文档开始/结束标记...然后您可以将其作为普通文档加载。只需创建一个文件,编写一个文档开始标记,复制该文件的内容,然后编写一个文档结束标记,并关闭文件句柄。你甚至可以在记忆中这样做。

或者,它可以 以片段形式 - 可能通过XmlReader读取它。我不能说这是我已经完成的事情,我通常会鼓励你创建一个完整的XML文件,因为那时你将会更熟悉。

答案 3 :(得分:0)

如果它没有root,则不是XML文件。如果您尝试解析它,解析器将抛出错误。你可以这样做

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

然后将此文件路径提供给解析器。