从模式生成空xml
我正在从用户指定的xml模式生成一个空xml,但我混淆了属性上的名称空间声明 例如,对于这个模式从模式生成空xml,xml,xsd,Xml,Xsd,我正在从用户指定的xml模式生成一个空xml,但我混淆了属性上的名称空间声明 例如,对于这个模式 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/Product" targetNamespace="http://tempuri.org/Product"> <xs:complexType name="Produc
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://tempuri.org/Product"
targetNamespace="http://tempuri.org/Product">
<xs:complexType name="ProductType">
<xs:sequence>
</xs:sequence>
<xs:attribute name="Id" type="xs:string" />
<xs:attribute name="Name" type="xs:string" />
</xs:complexType>
<xs:element name="Product" type="ProductType" />
</xs:schema>
在不知道模式的情况下,名称空间属性语法(限定?、非限定?)的常见用例是什么?后者是正确的,因为模式没有在根
元素上指定attributeFormDefault=“qualified”
。默认行为(attributeFormDefault=“unqualified”
)是嵌套在复杂类型中的
声明没有名称空间。如果将其设置为qualified
,他们将采用模式的targetNamespace
,此时您的第一个备选方案是正确的。根据XSD 1.0规范或XSD 1.1的本地属性声明(如示例中的Id
和Name
属性的声明)如果
- 他们的
声明具有xsd:attribute
,或者form=“qualified”
- 它们的
声明没有xsd:attribute
属性,并且所包含的form
元素具有xsd:schema
attributeFormDefault=“qualified”
因此,给定您显示的模式,它是第二个实例,而不是第一个实例,对该模式有效。我相信这是关于xs:attribute元素上的
form
属性的。如果from
属性值是限定的
,则架构描述的属性需要加前缀(即属于名称空间),否则不能加前缀。如果缺少form
属性,则该值来自xs:schema元素上的attributeFormDefault
。如果未指定此属性,则其默认值为unqualified
。转到并搜索“attributeFormDefault”以获取所有详细信息。在这种情况下,我认为VS是正确的
<root>
<Product xmlns="http://tempuri.org/Product"
xmlns:ns1="http://tempuri.org/Product"
ns1:Id="1"
ns1:Name="2" />
</root>
<root>
<Product xmlns="http://tempuri.org/Product"
Id="1"
Name="2" />
</root>
/*/ns1:Product/@Id
/*/ns1:Product/ns1:@Id