java - s4s-att-无效值 : Invalid attribute value for 'name' in element 'element'

标签 java xml xsd xsd-validation

XML

<ns2:Response xmlns:ns2="http://test.com/" Id="122212">
  <Infos size="1">
     <Info>
        <name>test</name>
     </Info>
  </Infos>
</ns2:Response>

生成的 XSD

 <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
     <!-- XML Schema Generated from XML Document on Mon Feb 20 2017 23:20:03 GMT+0530 (India Standard Time) -->
     <!-- with XmlGrid.net Free Online Service http://xmlgrid.net -->
     <xs:element name="ns2:Response">
           <xs:complexType>
                 <xs:sequence>
                       <xs:element name="Infos">
                             <xs:complexType>
                                   <xs:sequence>
                                         <xs:element name="Info">
                                               <xs:complexType>
                                                     <xs:sequence>
                                                           <xs:element name="name" type="xs:string"></xs:element>
                                                     </xs:sequence>
                                               </xs:complexType>
                                         </xs:element>
                                   </xs:sequence>
                                   <xs:attribute name="size" type="xs:int"></xs:attribute>
                             </xs:complexType>
                       </xs:element>
                 </xs:sequence>
                 <xs:attribute name="xmlns:ns2" type="xs:string"></xs:attribute>
                 <xs:attribute name="Id" type="xs:int"></xs:attribute>
           </xs:complexType>
     </xs:element>

错误

SAX Exception: s4s-att-invalid-value: Invalid attribute value for 'name' in element 'element'. Recorded reason: cvc-datatype-valid.1.2.1: 'ns2:Response' is not a valid value for 'NCName'.

最佳答案

您的 XML 和 XSD 需要进行几项更改,包括:

  • 更改<xs:element name="ns2:Response"><xs:element name="Response">因为元素名称声明必须是 非殖民化名称 (NCNAME)。
  • 删除<xs:attribute name="xmlns:ns2".../> 因为命名空间 不能声明为属性。
  • 添加targetNamespace到与 XML 文档中根元素的命名空间相匹配的 XSD。
  • 为那些您不希望位于命名空间中的元素导入单独的 XSD(假设您的根元素位于命名空间中)。您必须使用单独的 XSD 来完成此操作。

总而言之,您的 XML,

<?xml version="1.0" encoding="UTF-8"?>
<ns2:Response xmlns:ns2="http://test.com/"
              Id="122212">
  <Infos size="1">
    <Info>
      <name>test</name>
    </Info>
  </Infos>
</ns2:Response>

将根据这些 XSD 成功验证:

主要

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified"
           attributeFormDefault="unqualified"
           xmlns:ns="http://test.com/"
           targetNamespace="http://test.com/">
  <xs:import schemaLocation="Infos.xsd"/>
  <xs:element name="Response">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="Infos"/>
      </xs:sequence>
      <xs:attribute name="Id" type="xs:int"></xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>

导入 (Infos.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Infos">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Info">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string"></xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
      <xs:attribute name="size" type="xs:int"></xs:attribute>
    </xs:complexType>
  </xs:element>
</xs:schema>

关于java - s4s-att-无效值 : Invalid attribute value for 'name' in element 'element' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42351409/

相关文章:

java - 使用 include 标签时键盘下一个按钮

xsd - 如何在 <xs :all>? 中使项目可选

xml - 如何从另一个 xml 模式扩展一个 xml 模式?

java - 创建不带变量的新对象数组

java - Oracle 的商业 Hotspot JVM 相对于 OpenJDK 有哪些性能优势?

xml - 在 "> 拆分 xml 字符串

java - 尝试通过LSC(Ldap同步连接器)使Active Directory与openLDAP同步

java - 从 xml 生成 xsd 时混合 ="true"

java - 以类型特定的方式处理子类的正确模式是什么?

xml - 将秒转换为持续时间XPATH