Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 反序列化具有不同名称空间的xml文件_C#_Xml_Namespaces - Fatal编程技术网

C# 反序列化具有不同名称空间的xml文件

C# 反序列化具有不同名称空间的xml文件,c#,xml,namespaces,C#,Xml,Namespaces,我想导入具有不同名称空间但结构相似的xml文件。我还没有找到一个适合我需要的解决方案,所以现在我在问 我如何建立忽略名称空间的机制。或者在反序列化之前如何删除标记 我收到的错误消息是: <Root xmlns='namespace...'> was not expected. 您可以通过子类化XmlTextReader来创建一个非常简单的名称空间剥离器。对于XmlDeserializer,这个类似乎足够了: public class XmlReaderNoNamespaces :

我想导入具有不同名称空间但结构相似的xml文件。我还没有找到一个适合我需要的解决方案,所以现在我在问

我如何建立忽略名称空间的机制。或者在反序列化之前如何删除标记

我收到的错误消息是:

<Root xmlns='namespace...'> was not expected.

您可以通过子类化
XmlTextReader
来创建一个非常简单的名称空间剥离器。对于
XmlDeserializer
,这个类似乎足够了:

public class XmlReaderNoNamespaces : XmlTextReader
{
    public XmlReaderNoNamespaces(Stream stream) : base(stream)
    {
    }

    public override string Name => LocalName;

    public override string NamespaceURI => string.Empty;

    public override string Prefix => string.Empty;
}
像这样使用它:

using (StreamReader stream = new StreamReader(path))
using (var reader = new XmlReaderNoNamespaces(stream))
{
    xmlObject  =(FooContainer)ser.Deserialize(reader);
}

错误消息表明Xml不正确。是的,因为在我的XmlClass中我声明没有命名空间,但导入的Xml有一个命名空间。如果标记使用命名空间,则无法删除命名空间。xml变得无效。正确的方法是使xml解析动态使用文件中的名称空间或忽略名称空间。
using (StreamReader stream = new StreamReader(path))
using (var reader = new XmlReaderNoNamespaces(stream))
{
    xmlObject  =(FooContainer)ser.Deserialize(reader);
}