【问题标题】:Nested table which inherits its namespace cannot have multiple parent tables in different namespaces继承其命名空间的嵌套表不能在不同的命名空间中有多个父表
【发布时间】:2015-05-04 13:13:36
【问题描述】:

我正在使用 dataset.readxml 从 xml 填充数据集,如下所示。

ds.ReadXml("C:\\Data\\mytestdesigndata.xml");    

但是我得到一个例外,上面写着:

继承其命名空间的嵌套表'BRANCH'不能在不同的命名空间中有多个父表

xml数据如下

<ASchema>
  <A:Data DBREF="=24140/157" xmlns:A="http://www.test.com/xml/a">
   <B:BRANCH DBREF="=24140/158">
  </B:BRANCH>
  </A:Data>
  <A:TEST DBREF="=24174/138" xmlns:A="http://www.test.com/xml/a">
   <B:BRANCH DBREF="=24174/139" >
   </B:BRANCH>
  </A:TEST>
</ASchema>

我知道问题在于 B:BRANCH 映射到 A:DataA:TEST

我无法控制数据。如何解决该问题并仍然在我的 C# 应用程序中获取数据集?

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    下面的代码使用 Regex 从 XML 中删除所有命名空间。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.IO;
    using System.Text.RegularExpressions;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            const string FILENAME = @"c:\temp\test.xml";
            static void Main(string[] args)
            {
                string input = File.ReadAllText(FILENAME);
                string pattern = @"(</?)(\w+:)";
    
                string output = Regex.Replace(input, pattern, "$1");
    
                StringReader reader = new StringReader(output);
                DataSet ds = new DataSet();
                ds.ReadXml(reader);
            }
        }
    }
    ​
    

    【讨论】:

    • 这是一个顶级的解决方案,它确实有效。感谢那。不过我有一个疑问,更改命名空间会导致数据不同吗?
    • 与您提供的示例数据不同。
    • @jdweng 我对这篇文章有同样的问题,我不明白我是如何为我的代码实现你的解决方案的。
    猜你喜欢
    • 2013-03-03
    • 2017-12-21
    • 1970-01-01
    • 2020-11-24
    • 2019-08-03
    • 2013-03-10
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    相关资源
    最近更新 更多