xml 使用 XSD 1.1 进行验证

xml validation with XSD 1.1

我没有验证 XSD 文件的经验,我必须使用 XSD 1.1 验证 xml 文件,但我收到下一个错误:

lineNumber: 10; columnNumber: 71; c-cta-xpath: The XPath expression '@tipoelemento = CABECERA' couldn't compile successfully in 'cta-subset' mode, during CTA evaluation.

file.xml

<datos>
<elemento tipoelemento="CABECERA">
    <atributo>
        <nombre>VERSION</nombre>
        <valor>1.0</valor>
    </atributo>
    <atributo>
        <nombre>BRIGADA</nombre>
        <valor>JADSJL</valor>
    </atributo>
    <atributo>
        <nombre>BUZON</nombre>
        <valor>ASDKLFJKA</valor>
    </atributo>
</elemento>

file.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
       xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
       elementFormDefault="qualified"
       vc:minVersion="1.1">
<xs:element name="datos">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="elemento" minOccurs="1" maxOccurs="1">
                <xs:alternative test="@tipoelemento = 'CABECERA'" type="cabecera"/>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>
<xs:complexType name="cabecera">
    <xs:sequence>
        <xs:element name="atributo" minOccurs="1" maxOccurs="1" type="VERSION" />
        <xs:element name="atributo" minOccurs="1" maxOccurs="1" type="BRIGADA" />
        <xs:element name="atributo" minOccurs="1" maxOccurs="1" type="BUZON" />
    </xs:sequence>
</xs:complexType>
<xs:complexType name="VERSION">
<xs:sequence>
    <xs:element name="nombre" type="xs:string" minOccurs="1" fixed="VERSION" />
    <xs:element name="valor" type="xs:string" minOccurs="1" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="BRIGADA">
    <xs:sequence>
        <xs:element name="nombre" type="xs:string" minOccurs="1" fixed="BRIGADA" />
        <xs:element name="valor" type="xs:string" minOccurs="1" />
    </xs:sequence>
</xs:complexType>
<xs:complexType name="BUZON">
    <xs:sequence>
        <xs:element name="nombre" type="xs:string" minOccurs="1" fixed="BUZON" />
        <xs:element name="valor" type="xs:string" minOccurs="1" />
    </xs:sequence>
</xs:complexType>
</xs:schema>

我没有这方面的经验,抱歉!

我关注了这个link

我在这个 link click here 中看到我需要使用完整的 XPath 2.0,但我不知道该怎么做。

如何解决这个问题?

此致

条件类型赋值中使用的 XPath 表达式仅限于访问属性,它们不能访问子元素。

你的错误在于,在你的表达式中,@tipoelemento = CABECERACABACERA被解释为child::CABECERA,即对子元素的引用。我想你在这里想要一个字符串文字,它是 @tipoelemento = 'CABECERA' 字符串在引号中的地方。