当前位置: 首页 > 知识库问答 >
问题:

无法验证具有命名空间的XML的XSD

纪枫
2023-03-14

我无法使用下面的XSD验证XML,

<myTest>
  <standardHeader xmlns="http://tow.gow.ho.com/2009/08/StandardHeader/">
    <data>
      <LEVELDATA>D2D</LEVELDATA>
    </data>
  </standardHeader>
</myTest>

XSD数据

<?xml version="1.0" encoding="UTF-8"?>  
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="myTest">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element name="standardHeader"   minOccurs="0">
                    <xsd:complexType mixed="true">
                        <xsd:sequence>
                            <xsd:element name="data" minOccurs="0">
                                <xsd:complexType mixed="true">
                                    <xsd:sequence>
                                        <xsd:element name="LEVELDATA" minOccurs="0" type="xsd:normalizedString"/>
                                    </xsd:sequence>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

我在用XML验证这个XSD时遇到以下错误,

cvc复合型。2.4.答:发现以元素“standardHeader”开头的内容无效。应为“{standardHeader}”之一。

如何提供此standardHeader标签:

targetNamespace="http://tow.gow.ho.com/2009/08/StandardHeader/" 

共有2个答案

符功
2023-03-14

此问题的一个可能解决方案是将XSD拆分为两个文件:
一个用于第一个缺少的命名空间(a.XSD),另一个用于第二个命名空间(b.XSD),该命名空间由targetNamespace= a.xsd不需要该声明。第二个具有自己名称空间的文件将与

因此a.xsd是:

<?xml version="1.0" encoding="UTF-8"?>  
<xsd:schema elementFormDefault="qualified" 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:std="http://tow.gow.ho.com/2009/08/StandardHeader">
    <xsd:import namespace="http://tow.gow.ho.com/2009/08/StandardHeader"
            schemaLocation="b.xsd" />

    <xsd:element name="myTest">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element ref="std:standardHeader" minOccurs="0">
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

b.xsd是:

<?xml version="1.0" encoding="UTF-8"?>  
<xsd:schema elementFormDefault="qualified"  
            xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            targetNamespace="http://tow.gow.ho.com/2009/08/StandardHeader">

    <xsd:element name="standardHeader">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:element name="data" minOccurs="0">
                    <xsd:complexType mixed="true">
                        <xsd:sequence>
                            <xsd:element name="LEVELDATA" minOccurs="0" type="xsd:normalizedString"/>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

</xsd:schema>

这两个XSD使用其名称空间来验证您的XML文件。

这个答案的灵感来自这个网页:“多模式项目:零、一还是多命名空间?”,它并没有复制1对1的解决方案,而是受到那个网页的启发。

蔚和风
2023-03-14

问题是XML中的“名称空间”错误。。。(第2行)当您移除(或更正)它时,它是正确的。

在线验证器https://www.freeformatter.com/xml-validator-xsd.html

示例XML生成器(来自XSD)http://xsd2xml.com/

命名空间-Dochttps://www.w3schools.com/XML/xml_namespaces.asp

 类似资料:
  • 我有一个XML文件,其结构如下: XSD模式: 和可视化的XSL文件(学生tylesheet.xsl): 我目前正在学习一门关于XML的短期课程,任务是在XML文件中构建给定的XSD模式和一些示例记录,然后最终使用XSLT将内容可视化为超文本标记语言。其中一项任务指出,我需要使用“urn:学生”作为结构的默认命名空间。然而,当我这样做的时候,我不会在最终的可视化中收到数据。当我从XML文件中删除“

  • 问题内容: 我想针对XSD架构验证XML文件。XML文件根元素没有任何名称空间或xsi详细信息。它没有属性,只是。 我已经尝试从http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi.html尝试以下代码,但运气不佳 xml可以使用包含的名称空间标头等(通过xmlspy添加)很好地验证,但是我想可以不用手动编辑源文件就可以声明

  • 供应商提供的XML如下: 请注意,没有声明,供应商也没有提供模式。这不能更改,供应商将来会继续这样发布XML。 为了生成JAXB绑定,我创建了如下模式: 请注意,我已经声明了一个或多或少有意义的命名空间(“http://acme.com/schema”),以便它可以用于元素引用等。XJC 生成以下: 然后,我尝试解组XML文档: 我得到的例外是: 显然,这是因为XML元素属于一个空的名称空间,而J

  • 主要内容:命名冲突,使用前缀来避免命名冲突,XML 命名空间 - xmlns 属性,统一资源标识符(URI,全称 Uniform Resource Identifier),默认的命名空间,实际使用中的命名空间XML 命名空间提供避免元素命名冲突的方法。 命名冲突 在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。 这个 XML 携带 HTML 表格的信息: <table> <tr> <td>Apples</td> <td>Bananas</td> <

  • 我是XML新手。这是一个家庭作业。我已经尽了最大努力,但我无法让实例文档进行验证。我总是犯错误 “找不到元素'站点'的声明。 我想我可能错误地声明了一些名称空间或者schemaLocations。有人能给我指一下正确的方向吗? 作业步骤: > <块引用> 在sites.xml文件中,向根站点元素添加命名空间声明,将xs前缀与XML Schema命名空间的URI相关联。为文件指定默认命名空间http

  • 我试图通过定义类似java的包、类和导入的语法来学习Xtext。我的语法片段看起来像这样,CompilationUnit是根对象。 为了导入交叉引用,我使用DefaultGlobalScopeProvider,我已经用我自己的版本重写了QualifiedNameProvider,该版本附加了包名作为topClass的QualifiedName的前缀。为了自动导入自己的包,我编辑了特定于项目的Sco