【问题标题】:Writing an .xsd for elements with attributes为具有属性的元素编写 .xsd
【发布时间】:2011-12-23 15:53:42
【问题描述】:

我目前正在熟悉 xsd 和 xml 只是为了好玩,但我不确定自己做错了什么。我想为带有行和列的简单(嗯,不是真的,因为它具有属性)表编写一个 xsd,并在 Excel 中使用 XML 映射来很好地显示数据。行的行,列的列,就像在表中通常会看到的那样。例如

<?xml version='1.0'?>
<table name='Data1'>
<row>
<col name='id'>1</col>
<col name='x'>0</col>
<col name='y'>6</col>
<col name='z'>7</col></row>
<row>
<col name='id'>2</col>
<col name='x'>0</col>
<col name='y'>5</col>
<col name='z'>8</col></row>
<row>
<col name='id'>3</col>
<col name='x'>0</col>
<col name='y'>5</col>
<col name='z'>9</col></row></table>

实际上,它应该类似于:

  • 标识 | x |是 | z
  • 1 | 0 | 6 | 7
  • 2 | 0 | 5 | 8
  • 3 | 0 | 5 | 9

编辑架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="table">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="row" minOccurs="0" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="col" minOccurs="0" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                            <xs:attribute name="name" type="xs:string"/>
                                        </xs:extension>
                                    </xs:simpleContent>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="name" type="xs:string"/>
        </xs:complexType>
    </xs:element>
</xs:schema> 

我是否添加了一些额外的成分或遗漏了什么?我还不是很清楚这个 xsd 的事情。呵呵

提前感谢任何可以指出我的错误的人。

【问题讨论】:

  • 除了“失败”之外,您是否至少有一条错误消息或更具描述性的内容??
  • 在Excel中,说明无法映射xml文件。状态:失败。

标签: attributes xsd element


【解决方案1】:

该方案未验证 xml -- 列元素声明不完整。 试试这个:

<xs:element name='table'>
    <xs:complexType>
        <xs:sequence>
            <xs:element name='row'>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name='col' minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:simpleContent>
                                    <xs:extension base="xs:string">
                                        <xs:attribute name="name" type="xs:string">
                                        </xs:attribute>
                                    </xs:extension>
                                </xs:simpleContent>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name='name' type='xs:string'/>
    </xs:complexType>
</xs:element>

【讨论】:

  • “一个 xml 未经方案验证”是什么意思?如果行也有多个实例,我是否必须添加 minOccurs="0" maxOccurs="unbounded"?
  • 我的意思是,在您的方案行元素必须包含“名称”属性,但在 xml 中它不存在。您还将列定义为字符串元素——而不是具有您的属性的自定义复杂元素。在 "row" 元素中添加 minOccurs="0" maxOccurs="unbounded" 属性以允许元素出现多次。
  • 我已经编辑了我的示例以获得更全面的外观。我尝试使用您向我展示的架构,但仍然无法解决故障。我添加了映射,当我导入一个 xml 示例时(如顶部所示),它仍然无法映射 xml。我还需要在 xml 中添加什么,或者还有什么我没有得到的吗?感谢您迄今为止的帮助。
  • Excel 错误:未映射任何元素。并且未导入数据或仅导入了部分数据。
  • 如果您在 Excel 中使用 XML 映射来很好地显示数据只是为了好玩,最好检查 XSLT。根据 XML 映射本身从列元素中删除“名称”属性,并在 XSD 模式中单独添加具有具体名称的元素,而不是一个名称为“col”的重复元素。
猜你喜欢
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多