【问题标题】:Expecting element 'CustomerLeads' from namespace 'http://www.w3.org/2001/XMLSchema-instance'来自命名空间“http://www.w3.org/2001/XMLSchema-instance”的预期元素“CustomerLeads”
【发布时间】:2013-11-05 20:42:43
【问题描述】:

运行我的应用程序时出现以下错误:附加信息:第 2 行位置 64 中的错误。应来自命名空间“http://www.w3.org/2001/XMLSchema-instance”的元素“CustomerLeads”。遇到名称为“CustomerLeads”的“元素”,命名空间“” .

我不明白为什么我会收到此错误消息,因为您可以从 XML 中看到“CustomerLeads”包含在 XML 中。如果我取出命名空间,文件将不会读取元素。包括命名空间似乎有效,但似乎无法弄清楚为什么我会收到此错误。以及如何添加命名空间而不会出现此错误?

<?xml version="1.0" encoding="UTF-8"?>
<CustomerLeads xsi:noNamespaceSchemaLocation="BasicCustomerLead.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <CustomerLead>
    <FirstName>Paul</FirstName>
    <LastName>Smith</LastName>
    <Email>psmith@example.com</Email>
  </CustomerLead>-<CustomerLead>
    <FirstName>Nicole</FirstName>
    <LastName>Farhi</LastName>
    <Email>nicole.farhi@example.com</Email>
  </CustomerLead>-<CustomerLead>
    <FirstName>Raf</FirstName>
    <LastName>Simons</LastName>
    <Email>rafs@example.org</Email>
  </CustomerLead>
</CustomerLeads>

代码:

namespace Customer
{
    [DataContract(Name = "CustomerLeads", Namespace = "http://www.w3.org/2001/XMLSchema-instance")]
    public class CustomerLeads
    {

        [DataMember()]
        public string FirstName { get; set; }

        [DataMember()]
        public string LastName { get; set; }

        [DataMember()]
        public string EmailAddress { get; set; }


        public CustomerLeads unSortedLeads(string xmFilelPath)
        {

            // doc.Load("C:/Users/Admin/Downloads/potentialcustomers.xml");


            ICollection<CustomerLeads> deserializedPerson;
            CustomerLeads lead;

            FileStream fs = new FileStream(xmFilelPath, FileMode.Open);
            XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
            DataContractSerializer ser = new DataContractSerializer(typeof(CustomerLeads));


            lead = (CustomerLeads)ser.ReadObject(reader, true);
            reader.Close();
            fs.Close();

            FirstName = lead.FirstName.ToString();

            // foreach(CustomerLeads leads in deserializedPerson.)

            return lead;
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

    您可以尝试将&lt;xsi:CustomerLeads&gt; xsi 作为 xml 命名空间。似乎错误是说它不知道 CustomerLeads 属于哪个命名空间。

    <xsi:CustomerLeads xsi:noNamespaceSchemaLocation="BasicCustomerLead.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <CustomerLead>
        <FirstName>Paul</FirstName>
        <LastName>Smith</LastName>
        <Email>psmith@example.com</Email>
      </CustomerLead>-<CustomerLead>
        <FirstName>Nicole</FirstName>
        <LastName>Farhi</LastName>
        <Email>nicole.farhi@example.com</Email>
      </CustomerLead>-<CustomerLead>
        <FirstName>Raf</FirstName>
        <LastName>Simons</LastName>
        <Email>rafs@example.org</Email>
      </CustomerLead>
    </xsi:CustomerLeads>
    

    其他元素也可能需要前缀。

    【讨论】:

    • 我尝试将“CustomerLeads”添加到“DataContract”的“命名空间”中,但仍然出现同样的错误
    【解决方案2】:

    您的DataContract 属性断言CustomerLeads 元素应位于http://www.w3.org/2001/XMLSchema-instance XML 命名空间中。它不是。在您的 XML 中,CustomerLeads 没有命名空间(实际上是一个空的命名空间)。

    尝试从DataContract 属性中删除Namespace 设置。

    【讨论】:

    • 我仍然收到以下错误:附加信息:第 1 行位置 70 中的错误。应来自命名空间 'schemas.datacontract.org/2004/07/Customer' 的元素 'CustomerLeads'.. 遇到名称为 'CustomerLeads'、命名空间的 'Element' ''。
    • 嗯,也许你需要在DataContract 属性中设置Namespace = ""(或者,将xmlns="http://schemas.datacontract.org/2004/07/Customer" 添加到CustomerLeads XML 元素中)。看起来它正在为你准备一个命名空间,而不是默认一个空的命名空间。
    • 我都试过了。使用第一个解决方案XmlDictionaryReader reader 不读取任何元素(与包含的命名空间一样)第二个解决方案生成上面相同的错误消息,只是错误中包含了额外的命名空间
    • BasicCustomerLead.xsd 中的架构是否声明了targetNamespace?如果是这样,请尝试在 DataContract 属性上指定 that 命名空间。
    • 我无权访问 BasicCustomerLead.xsd 架构。也许我正在接近这个错误?我需要从每个 XML 元素返回一个 customerLead 对象列表。
    猜你喜欢
    • 1970-01-01
    • 2011-06-22
    • 2015-06-21
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2013-06-10
    相关资源
    最近更新 更多