元素不能包含字符[children],因为类型的内容类型仅为元素

时间:2015-12-28 12:07:38

标签: xml xsd xml-validation

我尝试使用XSD文件验证我的XML文件,但是收到以下错误消息:

  

[错误]:cvc-complex-type.2.3:元素'paragraph'不能有   character [children],因为类型的内容类型是仅元素

其中(如果我理解正确的话)意味着复杂类型不能将简单和复杂类型元素组合为子项。

但我该如何解决这个问题呢?我还是有点新手,所以解决方案可能很简单吗?

我的代码如下所示:

XSD:

<?xml version="1.0" encoding="UTF-8"?>
   <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
         <xs:element name="biography">
               <xs:complexType>
                     <xs:sequence>
                           <xs:element name="paragraph" maxOccurs="unbounded">
                                 <xs:complexType>
                                       <xs:sequence>
                                             <xs:element name="name">
                                                   <xs:complexType>
                                                         <xs:sequence>
                                                               <xs:element name="first_name" type="xs:string" minOccurs="0"></xs:element>
                                                               <xs:element name="last_name" type="xs:string"></xs:element>
                                                         </xs:sequence>
                                                   </xs:complexType>
                                             </xs:element>
                                             <xs:element name="emphasize" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
                                             <xs:element name="profession" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
                                             <xs:element name="date" minOccurs="0">
                                                   <xs:complexType>
                                                         <xs:sequence>
                                                               <xs:element name="month" type="xs:string"></xs:element>
                                                               <xs:element name="day" type="xs:int"></xs:element>
                                                               <xs:element name="year" type="xs:int"></xs:element>
                                                         </xs:sequence>
                                                   </xs:complexType>
                                             </xs:element>
                                       </xs:sequence>
                                 </xs:complexType>
                           </xs:element>
                           <xs:element name="definition" maxOccurs="unbounded">
                                 <xs:complexType>
                                       <xs:sequence>
                                             <xs:element name="term" type="xs:string"></xs:element>
                                       </xs:sequence>
                                 </xs:complexType>
                           </xs:element>
                     </xs:sequence>
               </xs:complexType>
         </xs:element>
   </xs:schema>

XML:

<biography>
 <paragraph>
  <name><first_name>Alex</first_name> <last_name>Turing</last_name></name>
  was one of the first people to truly deserve the name <emphasize>computer
  scientist</emphasize>. Although his contributions to the fields are too
  numerous to lst, his best-known are the famous <emphasize>Turing
  Test</emphasize> and <emphasize>Turing Machine</emphasize>.
 </paragraph>

 <definition>The <term>Turing Test</term> is to this day the standard test
  for determining whether a computer is truly intelligent. This test yet
  has to be passed.</definition>

 <definition>A <term>Turing Machine</term> is an abstract finite state
 automaton with infinite memory that can be proven equivalent to any other
 finite state automaton with arbitrarily large memory. Thus what is true
 for one Turing machine is true for all Turing machines no matter how
 implemented.</definition>

 <paragraph>
  <name><last_name>Turing</last_name></name> was also an accomplished
  <profession>mathematician</profession> and
  <profession>cryptographer</profession>. His assistance was crucial in
  helping the Allies decode the German Enigma cipher. He committed suicide
  on <date><month>June</month> <day>7</day>, <year>1954</year></date>
  after being convicted of homosexuality and forced to take female hormone
  injections.
  </paragraph>
</biography>

2 个答案:

答案 0 :(得分:5)

这正是 混合 内容的目的:

    <xs:element name="paragraph" maxOccurs="unbounded">
      <xs:complexType mixed="true">

    <xs:element name="definition" maxOccurs="unbounded">
      <xs:complexType mixed="true">

请注意,鉴于您的XML,您可能还希望paragraphdefinition位于xs:choice macOccurs="unbounded"

您的XSD已更新,并且所有更改都已更新,以便您的XML有效:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="biography">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="paragraph">
          <xs:complexType mixed="true">
            <xs:sequence>
              <xs:element name="name">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="first_name" type="xs:string" minOccurs="0"></xs:element>
                    <xs:element name="last_name" type="xs:string"></xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              <xs:element name="emphasize" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
              <xs:element name="profession" maxOccurs="unbounded" minOccurs="0" type="xs:string"></xs:element>
              <xs:element name="date" minOccurs="0">
                <xs:complexType mixed="true">
                  <xs:sequence>
                    <xs:element name="month" type="xs:string"></xs:element>
                    <xs:element name="day" type="xs:int"></xs:element>
                    <xs:element name="year" type="xs:int"></xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
        <xs:element name="definition">
          <xs:complexType mixed="true">
            <xs:sequence>
              <xs:element name="term" type="xs:string"></xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

答案 1 :(得分:4)

对我来说,由于xml中的奇怪字符,会发生此错误 当我在“BeyondCompare”工具中比较两个具有类似数据的文件时 我找到了不可见的未知字符。 在“Visual Studio Code”中打开错误文件,它向我展示了一些特殊字符。

当我复制粘贴在线工具中的字符串以查找特殊字符时, 我发现这是一个特殊的角色(&amp;#65279)。

由于这个角色,我遇到了上述错误。花了两周的时间才找到解决方案。