Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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# 命名空间B中的元素A在命名空间D中具有无效的子元素C_C#_Xml_Xsd - Fatal编程技术网

C# 命名空间B中的元素A在命名空间D中具有无效的子元素C

C# 命名空间B中的元素A在命名空间D中具有无效的子元素C,c#,xml,xsd,C#,Xml,Xsd,我在验证XML时遇到以下错误 命名空间“”中的元素“根”无效 命名空间“”中的子元素“Student”。列表 预期的可能元素的数量:“学生” 我不能发布实际的XSD,但我已经准备了一个小XSD来复制这个问题。另外,我无法控制XSD,因为它是由客户机提供的。示例XSD如下所示 <xs:schema xmlns:stu="http://www.test.com/test" xmlns:xs="http://www.w3.org/2001/XMLSchema"

我在验证XML时遇到以下错误

命名空间“”中的元素“根”无效 命名空间“”中的子元素“Student”。列表 预期的可能元素的数量:“学生”

我不能发布实际的XSD,但我已经准备了一个小XSD来复制这个问题。另外,我无法控制XSD,因为它是由客户机提供的。示例XSD如下所示

<xs:schema xmlns:stu="http://www.test.com/test" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema"      
           targetNamespace="http://www.test.com/test" 
           elementFormDefault="unqualified" 
           attributeFormDefault="unqualified" 
           version="1.2">
<xs:element name="Root">
<xs:complexType>
  <xs:sequence>
    <xs:element name="Student" type="stu:Student" minOccurs="1" maxOccurs="1">          
    </xs:element>
  </xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="Date">
  <xs:restriction base="xs:date">
    <xs:minInclusive value="0001-01-01"/>
    <xs:maxInclusive value="9999-12-31"/>
    <xs:pattern value="\p{Nd}{4}-\p{Nd}{2}-\p{Nd}{2}"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="String100">
  <xs:restriction base="xs:string">
    <xs:maxLength value="100"/>
    <xs:minLength value="1"/>
  </xs:restriction>
</xs:simpleType>
<xs:complexType name="Student">
  <xs:sequence>
    <xs:element name="StudentName" type="stu:String100" nillable="false"/>
    <xs:element name="AdmissionDate" type="stu:Date" nillable="false"/>
  </xs:sequence>
</xs:complexType>
</xs:schema>

我根据提供的XSD和我拥有的数据生成XML。生成的XML如下所示

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://www.test.com/test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Student>
        <StudentName>StudentName1</StudentName>
        <AdmissionDate>2010-01-01</AdmissionDate>
    </Student>
</Root>

学生姓名1
但它指出,我们应该删除前缀使用

<order> 

而不是

<os:order>. 
但在我的例子中,XML已经像这样生成了。我如何克服这个问题

我还使用visualstudio从XSD生成了示例XML,以了解其中的区别。验证的示例XML只有一行不同的代码

<?xml version="1.0" encoding="utf-8"?>
<Root xmlns="http://www.test.com/test">
   <Student xmlns=""> <!-- JUST THIS xmlns="" ADDED prevents the issue -->
     <StudentName>StudentName1</StudentName>
     <AdmissionDate>2010-01-01</AdmissionDate>
   </Student>
</Root>

学生姓名1
2010-01-01

添加xmlns=”“有什么区别?我正在寻找替代解决方案和问题的原因。请提供帮助。

这是一个很好的问题,因为它触及了xml名称空间如何工作的核心

必须在Student元素上设置
xmlns=”“
,是因为模式指定了
elementFormDefault=“unqualified”
,这意味着根元素下声明的任何元素都位于“null”命名空间中

您想要的实例:

<Root xmlns="http://www.test.com/test">
  <Student>
    <StudentName>f</StudentName>
    <AdmissionDate>0001-01-01</AdmissionDate>
  </Student>
</Root>
<x:Root xmlns:x="http://www.test.com/test">
  <Student>
    <StudentName>f</StudentName>
    <AdmissionDate>0001-01-01</AdmissionDate>
  </Student>
</x:Root>

此外,如果您的客户机将架构更改为
elementFormDefault=“qualified”
,则您所需的实例表单将有效。

非常感谢。:)现在我将使用第二个选项。很抱歉,我对XML和XSD的了解有限。但如果我使用第二个选项,明天客户端更改elementFormDefault=“qualified”,我想这将再次开始崩溃。然后电流输出将验证,但这将开始断开。对吗?是的,没错。更改为elementFormDefault=“qualified”将要求学生与Root属于同一命名空间。再次感谢。我再次在模式中测试了它——我认为您的客户机在这里犯了一个错误——我认为他们显然打算让Student元素属于名称空间。我会向他们澄清这一点,因为现在改变它比6个月后你忘记这一切要容易得多!谢谢但我正在动态生成XML。所以在任何情况下,我都需要处理这两种情况。