元素不能有字符 [children],因为该类型的内容类型是仅限元素的
Element cannot have character [children], because the type's content type is element-only
我尝试使用 XSD 文件验证我的 XML 文件,但收到以下错误消息:
[Error]: cvc-complex-type.2.3: Element 'paragraph' cannot have
character [children], because the type's content type is element-only
这(如果我理解正确的话)意味着复杂类型不能将简单类型元素和复杂类型元素组合为子元素。
但是我该如何解决这个问题?我对此还是有点陌生,所以解决方案可能很简单?
我的代码如下所示:
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>
这正是mixed的目的内容:
<xs:element name="paragraph" maxOccurs="unbounded">
<xs:complexType mixed="true">
并且:
<xs:element name="definition" maxOccurs="unbounded">
<xs:complexType mixed="true">
请注意,鉴于您的 XML.
,您可能还希望 paragraph
和 definition
位于 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>
对我来说这个错误是因为xml中的奇怪字符
当我在 "BeyondCompare" 工具中比较两个具有相似数据的文件时
我发现了不可见的未知字符。
在 "Visual Studio Code" 中打开错误文件,它显示了一些特殊字符。
当我在在线工具中复制粘贴字符串以查找特殊字符时,
我发现这是一个特殊字符 ().
因为这个字符,我得到了上面的错误。花了两周的时间才找到解决方案。
我尝试使用 XSD 文件验证我的 XML 文件,但收到以下错误消息:
[Error]: cvc-complex-type.2.3: Element 'paragraph' cannot have character [children], because the type's content type is element-only
这(如果我理解正确的话)意味着复杂类型不能将简单类型元素和复杂类型元素组合为子元素。
但是我该如何解决这个问题?我对此还是有点陌生,所以解决方案可能很简单?
我的代码如下所示:
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>
这正是mixed的目的内容:
<xs:element name="paragraph" maxOccurs="unbounded">
<xs:complexType mixed="true">
并且:
<xs:element name="definition" maxOccurs="unbounded">
<xs:complexType mixed="true">
请注意,鉴于您的 XML.
,您可能还希望paragraph
和 definition
位于 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>
对我来说这个错误是因为xml中的奇怪字符 当我在 "BeyondCompare" 工具中比较两个具有相似数据的文件时 我发现了不可见的未知字符。 在 "Visual Studio Code" 中打开错误文件,它显示了一些特殊字符。
当我在在线工具中复制粘贴字符串以查找特殊字符时, 我发现这是一个特殊字符 ().
因为这个字符,我得到了上面的错误。花了两周的时间才找到解决方案。