c# - 反序列化具有不同命名空间的 xml 文件

标签 c# xml namespaces

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

我如何建立以忽略命名空间。或者如何在反序列化之前删除标签?

我收到的错误消息:

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

我反序列化xml文件的方式:
using (StreamReader stream = new StreamReader(path))
{
    xmlObject = (XmlClass)new 
    XmlSerializer(typeof(XmlClass)).Deserialize(stream);
}

最佳答案

您可以通过继承 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);
}

关于c# - 反序列化具有不同命名空间的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50990192/

相关文章:

c# - Microsoft Visual C++ 2008 Redistributable Package - 它包含哪些文件?

c# - 我的第一个 .net Owin 程序无法运行并显示网页

c# - 从动态 json 结果中获取列表

javascript - 从代码隐藏和代码隐藏中的脚本调用函数内部调用 JavaScript(PageMethods 未定义)

XML、 namespace 和 E4X

java - GWT Maven 插件替换 web.xml

java - 当我通过jdom解析一个xml文档时,我发现一些 '\r'字符丢失了

c# - 我的 C# 程序集还是我的代码?

c++ - 为同一对象管理多个流运算符(operator<<, >>)

带有原子命名空间的用于scrapy的Xpath