【问题标题】:xsd Elements: how to place single simple values with complex type (sequence)xsd Elements:如何放置具有复杂类型(序列)的单个简单值
【发布时间】:2013-06-01 04:14:33
【问题描述】:

我需要像这样创建一个 xml 文件:

<AGENDA>
 <COVER COLOR>BLACK</COVER COLOR>
 <PRICE>24.99</PRICE>
 <ENTRIES>
  <NAMESURNAME>AAABBB</NAMESURNAME>
  <PHONENUMBER>3434534543</PHONENUMBER>
  <NAMESURNAME>EEEAAA</NAMESURNAME>
  <PHONENUMBER>2342342</PHONENUMBER>
 </ENTRIES>
</AGENDA>

即一个或多个选项和一个复杂类型的顺序。每个 xml 文件只需要一组选项,而一个或多个条目。 我使用嵌入在 VS2010 中的 xsd 文本编辑器,但我不知道如何正确放置选项元素。 如果我输入(在&lt;xsd:schema....&gt; 标签之后):

 <xsd:element name="OPTION1" type="xsd:string"/>
  <xsd:element name="RawPolling">
    <xsd:complexType>
      <xsd:sequence maxOccurs="unbounded" minOccurs="0">
        <xsd:element name="RawPollingEntry">
          <xsd:complexType>
            <xsd:sequence maxOccurs="1" minOccurs="0">
              <xsd:element name="Nome" type="xsd:string" />
.....
....

我在 xsd 上没有收到任何错误,但是当我编写 xml 时,我得到“XML 文档不能包含多个根级元素” 我试图将 OPTION1 移到 RawPolling 内(但不在 RawPollingEntry 内,OPTION1 不是复杂/序列类型的一部分,每个 xml 文件我只需要一个 OPTION1)并得到其他错误(“元素......有无效的子元素元素...)

我怎样才能做到这一点?

【问题讨论】:

标签: xml xsd


【解决方案1】:

首先,您的 XML 无效 - 您不能在名称中包含带有空格的标签,因此:

<COVER COLOR> ..... </COVER COLOR>

一开始就无效。

下一步 - .NET 附带了一个名为 xsd.exe 的出色工具。在这种情况下,我使您的 XML 有效(将标签更改为 &lt;COVERCOLOR&gt;),然后在其上运行 xsd.exe - 这会根据您的 XML 文件的内容生成一个 XML 模式文件。

这里的结果是这样的:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="newschema" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="AGENDA">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="COVERCOLOR" type="xs:string" minOccurs="0" />
        <xs:element name="PRICE" type="xs:string" minOccurs="0" />
        <xs:element name="ENTRIES" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="NAMESURNAME" nillable="true" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="NAMESURNAME_Text" msdata:Ordinal="0">
                    <xs:extension base="xs:string">
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
              <xs:element name="PHONENUMBER" nillable="true" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:simpleContent msdata:ColumnName="PHONENUMBER_Text" msdata:Ordinal="0">
                    <xs:extension base="xs:string">
                    </xs:extension>
                  </xs:simpleContent>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

您应该在类似以下的路径中找到您的 xsd.exe:

C:\Program Files (x86)\Microsoft SDKs\Windows\v6.0A\Bin\

这是在 64 位 Windows 7 计算机上 - 在 32 位计算机上,它将改为 c:\program files\...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-21
    • 2019-10-30
    相关资源
    最近更新 更多