该模式如何定义此xml中的命名空间?

时间:2013-12-02 22:51:33

标签: xml xpath xsd

我不是这样做的。这是架构:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="tomas">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="pt">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="cat" type="xs:string"/>
                            <xs:element name="shortVal" type="xs:short"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

这是xml:

<?xml version="1.0"?>
<t:root xmlns:t="tomas">
    <pt>
        <cat>Category 1</cat>
        <shortVal>1</shortVal>
    </pt>
</t:root>

哪个正确的xpath:/ t:root / pt / shortVal

为什么不是/ t:root / t:pt / t:shortVal

谢谢 - 戴夫

1 个答案:

答案 0 :(得分:1)

默认情况下,架构的targetNamespace仅适用于“全局”元素,即在架构顶层声明的元素。如果您希望targetNamespace也适用于嵌套在complexType内的“本地”元素,那么您应该在xs:schema元素上设置elementFormDefault="qualified"