首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XML验证错误: cvc-elt.1.a:找不到元素'Statistics‘的声明

XML验证错误: cvc-elt.1.a:找不到元素'Statistics‘的声明
EN

Stack Overflow用户
提问于 2015-12-21 18:44:10
回答 2查看 889关注 0票数 1

这里我的XSD:

代码语言:javascript
运行
复制
<xs:schema xmlns:tns="http://www.w3.org/1999/xhtml" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3.org/1999/xhtml" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:complexType name="Statistics">
    <xs:sequence>
        <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
            <xs:complexType>
                <xs:sequence>
                    <xs:element name="id" type="xs:string"/>
                    <xs:element name="date" type="xs:string"/>
                    <xs:element name="name" type="xs:string"/>
                    <xs:element name="email" type="xs:string" nillable="true"/>
                    <xs:element name="Advertisers">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="item" minOccurs="0" maxOccurs="unbounded">
                                    <xs:complexType>
                                        <xs:sequence>
                                            <xs:element name="id" type="xs:string"/>
                                            <xs:element name="ls_revenue_usd_equivalence" type="xs:string"/>
                                            <xs:element name="revenue_eur" type="xs:string"/>
                                            <xs:element name="revenue_usd" type="xs:string"/>
                                            <xs:element name="revenue_rub" type="xs:string"/>
                                            <xs:element name="ls_leads" type="xs:string"/>
                                            <xs:element name="revenue_usd_equivalence" type="xs:string"/>
                                            <xs:element name="leads" type="xs:string"/>
                                            <xs:element name="payout_usd" type="xs:string"/>
                                            <xs:element name="payout_rub" type="xs:string"/>
                                            <xs:element name="payout_eur" type="xs:string"/>
                                            <xs:element name="payout_usd_equivalence" type="xs:string"/>
                                            <xs:element name="profit" type="xs:string"/>
                                        </xs:sequence>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="total">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="leads" type="xs:string"/>
                                <xs:element name="payout_usd" type="xs:string"/>
                                <xs:element name="payout_rub" type="xs:string"/>
                                <xs:element name="payout_eur" type="xs:string"/>
                                <xs:element name="payout_usd_equivalence" type="xs:string"/>
                                <xs:element name="profit" type="xs:string"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:sequence>
</xs:complexType>

以下是我的XML:

代码语言:javascript
运行
复制
 <?xml version="1.0" encoding="UTF-8"?>
 <Statistics xmlns="http://www.w3.org/1999/xhtml" attributeFormDefault="unqualified" elementFormDefault="qualified">
        <item>
            <id>1</id>
            <date>16.12.2015</date>
            <name>test</name>
            <email>test</email>
            <Advertisers>
                <item>
                    <id>2</id>
                    <ls_revenue_usd_equivalence>0</ls_revenue_usd_equivalence>
                    <revenue_eur>0</revenue_eur>
                    <revenue_usd>0</revenue_usd>
                    <revenue_rub>0</revenue_rub>
                    <ls_leads>0</ls_leads>
                    <revenue_usd_equivalence>0</revenue_usd_equivalence>
                    <leads>0</leads>
                    <payout_usd>0</payout_usd>
                    <payout_rub>0</payout_rub>
                    <payout_eur>0</payout_eur>
                    <payout_usd_equivalence>0</payout_usd_equivalence>
                    <profit>0</profit>
                </item>
            </Advertisers>
            <total>
                <leads>0</leads>
                <payout_usd>0</payout_usd>
                <payout_rub>0</payout_rub>
                <payout_eur>0</payout_eur>
                <payout_usd_equivalence>0</payout_usd_equivalence>
                <profit>0</profit>
            </total>
        </item>
 </Statistics>

当我试图验证这个XML时,我会得到以下错误:

cvc-elt.1.a:找不到元素'Statistics‘的声明。

乍一看,好的,名称空间匹配。我不明白还有什么可能是错误。我做错了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-21 19:36:40

首先,不重复使用众所周知的名称空间http://www.w3.org/1999/xhtml,而不是它的预期用途。您只是要求混淆、与现有XML目录冲突等等。

其次,attributeFormDefault elementFormDefault 不属于XML,而是属于XSD

第三,正如Martin所提到的,您的Statistics. 缺少XSD的元素声明

第四,如果您确实无法更改XSD,但希望使用它,则可以执行以下操作之一:

下面是如何在您的情况下使用xsi:type (没有应用推荐的命名空间修复):

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<Statistics xmlns="http://www.w3.org/1999/xhtml"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.w3.org/1999/xhtml try.xsd"
            xmlns:tns="http://www.w3.org/1999/xhtml"
            xsi:type="tns:Statistics">
  <item>
    <id>1</id>
    <date>16.12.2015</date>
    <name>test</name>
    <email>test</email>
    <Advertisers>
      <item>
        <id>2</id>
        <ls_revenue_usd_equivalence>0</ls_revenue_usd_equivalence>
        <revenue_eur>0</revenue_eur>
        <revenue_usd>0</revenue_usd>
        <revenue_rub>0</revenue_rub>
        <ls_leads>0</ls_leads>
        <revenue_usd_equivalence>0</revenue_usd_equivalence>
        <leads>0</leads>
        <payout_usd>0</payout_usd>
        <payout_rub>0</payout_rub>
        <payout_eur>0</payout_eur>
        <payout_usd_equivalence>0</payout_usd_equivalence>
        <profit>0</profit>
      </item>
    </Advertisers>
    <total>
      <leads>0</leads>
      <payout_usd>0</payout_usd>
      <payout_rub>0</payout_rub>
      <payout_eur>0</payout_eur>
      <payout_usd_equivalence>0</payout_usd_equivalence>
      <profit>0</profit>
    </total>
  </item>
</Statistics>
票数 1
EN

Stack Overflow用户

发布于 2015-12-21 19:02:21

您已经用xs:complexType name="Statistics"定义了一个复杂类型,但没有定义该名称的元素。您需要定义<xs:element name="Statistics"><xs:complexType>...</xs:complexType></xs:element>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34402328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档