-->

指定命名空间的XSD元素(Specify namespace for an element in X

2019-10-20 18:07发布

我有一个XML为此我需要生成一个XSD。 我的XML去如下:

例如:

    <mes:GetInboundResponseGetInboundSMS 
          xmlns:mes="http://abcd.com">
         <response>
            <messages>
               <item>
                  <date>15/04/2014 00:00:00</date>
               </item>
               <item>
                  <date>01/07/2014 10:01:32</date>
               </item>
            </messages>
         </response>
    </mes:GetInboundResponseGetInboundSMS>

请注意,只有最外层的元素GetInboundResponseGetInboundSMS属于一个命名空间http://abcd.com -元素的其余部分没有。 如何在XSD指定此?

我试着用以下XSD但给我的错误:

XSD:

<xs:schema attributeFormDefault="unqualified" 
           elementFormDefault="qualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="GetInboundResponseGetInboundSMS">
    <xs:complexType>
      <xs:sequence>

<xs:element name="response">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="messages">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="item" 
                          maxOccurs="unbounded" minOccurs="0">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element type="xs:string" name="date"/>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

</xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

但是,当我尝试使用在线验证的XSD验证实例,我结束了这个错误:

无效。
错误 - 1号线,95:org.xml.sax.SAXParseException; LINENUMBER:1; 得到columnnumber:95; CVC-elt.1:找不到元素的声明 'MES:GetInboundResponseGetInboundSMS'。

这是合乎逻辑的,因为我没有提供的XSD的命名空间。 请帮助我了解如何提供这个命名空间只为最外层的元素在我的XSD。

Answer 1:

你有没有被你所需的东西两件事情。

  • 您希望GetInboundResponseGetInboundSMS元素在命名空间http://abcd.com 。

    所以添加targetNamespace="http://abcd.com"你的架构元素。

  • 你想要的元素(这是所有声明为本地匿名复杂类型的GetInboundResponseGetInboundSMS元素)的儿童为不合格。

    因此,改变elementFormDefault="qualified"的架构元素对elementFormDefault="unqualified"

为您的Schema文档的开始标记应该是这个样子:

<xs:schema targetNamespace="http://abcd.com"
           attributeFormDefault="unqualified" 
           elementFormDefault="unqualified" 
           xmlns:xs="http://www.w3.org/2001/XMLSchema">


文章来源: Specify namespace for an element in XSD