我正在从用户指定的 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="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>
我已经生成了这个;
<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>
哪一个是正确的?
更新1:
无论 xml 模式表单属性设置为什么,如果我在 XML DOM 中加载生成的 xml,Name 属性 NamespaceURI 始终为空字符串。(虽然产品有命名空间)
我正在对这些属性执行 xpath 查询,我无法决定是始终使用命名空间前缀还是假设它始终与父元素的命名空间相同。
示例差异;
/*/ns1:Product/@Id
/*/ns1:Product/ns1:@Id
在不知道架构的情况下,命名空间属性语法(合格?,不合格?)的常见用例是什么?