我有一个XML文件和XSD。在这种形式下它工作正常:
<tns:Users xmlns:tns="http://www.example.org/NewXMLSchema">
<User>
<FirstName>Max</FirstName>
<LastName>Gordon</LastName>
<Salary>80000</Salary>
</User>
<User>
<FirstName>Alex</FirstName>
<LastName>Disel</LastName>
<Salary>75000</Salary>
</User>
</tns:Users>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.org/NewXMLSchema"
xmlns:tns="http://www.example.org/NewXMLSchema">
<element name="Users">
<complexType>
<sequence maxOccurs="unbounded" minOccurs="1">
<element name="User">
<complexType>
<sequence>
<element name="FirstName" type="string"/>
<element name="LastName" type="string"/>
<element name="Salary" type="int"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
我想知道为什么它在另一个中没有:如果我在xml文件中省略了tns前缀?我的意思是它将成为默认命名空间:
<Users xmlns="http://www.example.org/NewXMLSchema">
<User>
<FirstName>Max</FirstName>
<LastName>Gordon</LastName>
<Salary>80000</Salary>
</User>
<User>
<FirstName>Alex</FirstName>
<LastName>Disel</LastName>
<Salary>75000</Salary>
</User>
</Users>
答案 0 :(得分:2)
因为这些是不同的XML文档。
在第一个XML中:
<tns:Users xmlns:tns="http://www.example.org/NewXMLSchema">
<User>
<FirstName>Max</FirstName>
<LastName>Gordon</LastName>
<Salary>80000</Salary>
</User>
<User>
<FirstName>Alex</FirstName>
<LastName>Disel</LastName>
<Salary>75000</Salary>
</User>
</tns:Users>
只有根元素Users
位于http://www.example.org/NewXMLSchema
命名空间中。
所有其他元素都在{no namespace}中。
这与您的XML架构相对应。它确实定义了目标命名空间。
但它仅适用于全局元素Users
。
所有其他元素都在本地声明,并确定其命名空间
通过elementFormDefault
元素的<schema ...>
属性。
您没有指定此属性,但它存在且其默认值为“不合格”。
这意味着所有本地元素都没有命名空间。
现在,让我们看看你的第二个XML:
<Users xmlns="http://www.example.org/NewXMLSchema">
<User>
<FirstName>Max</FirstName>
<LastName>Gordon</LastName>
<Salary>80000</Salary>
</User>
<User>
<FirstName>Alex</FirstName>
<LastName>Disel</LastName>
<Salary>75000</Salary>
</User>
</Users>
在这里,您直截了当地指明所有元素都位于http://www.example.org/NewXMLSchema
命名空间(根和其他所有内容)。但这不符合您的XML架构!