【问题标题】:Need assistance in creating an xsd在创建 xsd 时需要帮助
【发布时间】:2012-04-20 16:36:22
【问题描述】:

我是 xsd 的新手。我正在尝试创建一个 xsd,以便我的 xml 应该采用以下方式..

<Info>
            <Val name="n_1">A</Val>
            <Val name="n_2">123</Val>
            <Val name="n_3">2012-05-05T00:00:00</Val>          
</Info>

我创建的xsd是这样的..

<xs:element name="Info">
    <xs:complexType>
        <xs:sequence>
             <xs:element name="n_1" type="xs:string"/>
            <xs:element name="n_2" type="xs:integer"/>
            <xs:element name="n_3" type="xs:dateTime"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

这显然无助于满足我的要求..但是此时我对一件事感到震惊..如何创建属性值不同的 3 个元素“val”...即使我做到了不知何故,我会得到列表错误列表。我该如何管理?

我实际上是在写这个 xsd 以便我在 excel 中的数据可以转换为 xml.. 要添加一些关于我的 excel 的内容,一行是一组,其中一列是信息(最糟糕的是:| 因为我有 3 个 Val 用于一个信息)...

我最初认为这个 xml 是错误的,但我错了.. 它是标准输出/输入 xml..

对实现这一目标的任何帮助都将是可观的。

提前谢谢.. :)

【问题讨论】:

  • 根据需求变化编辑了问题。具体来说,我已将属性值的类型从字符串更改为 dateTime 等。
  • 请仔细考虑您的实际需求并发布一个明确说明的问题。你从(显然)一些东西开始,现在你有一些不同的东西。
  • 对不起,我的要求今天发生了变化,我在发布问题时没有意识到这一点。对此非常抱歉。我非常感谢您为解决我的问题所做的努力。谢谢 Beaucoup 先生 :)

标签: xml xsd excel-2010


【解决方案1】:

XSD 应该是这样的:

<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="Info">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Val" maxOccurs="unbounded">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="name">
                  <xs:simpleType>
                    <xs:restriction base="xs:string">
                      <xs:enumeration value="n_1"/>
                      <xs:enumeration value="n_2"/>
                      <xs:enumeration value="n_3"/>
                    </xs:restriction>
                  </xs:simpleType>
                </xs:attribute>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

它声明了一个元素Info,其中包含一个子元素Val的列表。每个元素 Val 包含一个字符串值(&lt;xs:simpleContent&gt;&lt;xs:extension base="xs:string"&gt;),以及一个只有三个可能值 n_1n_2n_3name 属性。

根据您的确切要求,您可以使用 Val 内容的类型 - 例如,指定它是一个具有特定最大长度的字符串。同样你可以改变name属性值的限制(或者没有限制)

【讨论】:

  • 非常感谢......我会试试这个并回复你......:D
  • 嘿,当我在 Visual Studio 中编写这些行时,它说第 5 行中的 complexType 在此上下文中不受支持。另外,我无法将 xsd 作为源导入到 excel 表..还是谢谢:)
  • Mhh...我在 Visual Studio 中编写了 XSD,并使用 Excel 进行了尝试,也许您的命名空间有问题?我正在更新答案以包含完整的 XSD,包括命名空间
  • 感谢您的快速响应.. :D 实际上,在它工作的架构中添加 elementFormDefault="qualified" 后.. :D 请让我知道如何玩 n_1,n_2,n_3 coz ,尽管它们在我们的架构中,但在将其声明为源之后,我无法在 excel 中查看它们。另外,我如何更改它们的类型,我的意思是 n_1 是字符串,n_2 是 dateTime 左右。请原谅我我让它变得非常复杂......再次感谢您的快速回复:D
  • n_1, n_2 等是属性的可能值 - 换句话说,它们不能是字符串或日期时间等。您不能将同一个属性声明为多个不同的类型。
【解决方案2】:

试试这个 XSD。这会强制 Val 节点的“name”属性的唯一性。

<?xml version="1.0" encoding="utf-8"?> <xs:schema   xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Info" >
    <xs:complexType>
        <xs:sequence>
            <xs:element name="Val" maxOccurs="unbounded">
                <xs:complexType>
                            <xs:simpleContent >
                                <xs:extension base="xs:anySimpleType">
                                    <xs:attribute name="name" use="required" />
                                </xs:extension>
                            </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:unique name="uniqueNameForValList">
        <xs:selector xpath="Val" />
        <xs:field xpath="@name" />
    </xs:unique>
</xs:element> 

【讨论】:

  • 非常感谢.. 我会试试这个并回复你.. :d
  • 嘿,我在哪里指定属性名称 n_1,n_2,n_3 并且我可能还会更改它们的类型.. 一个可能是字符串,另一个可能是 dateTime.. 请让我知道我该怎么做实现这一点.. 请原谅如果我问的是基本的事情,但我刚刚开始创建 xsd.. 还是谢谢 :)
  • 请作出正确的陈述。您希望属性的类型是字符串/日期时间还是Val节点中的内容是不同的类型
  • 实际上,我的要求最近发生了变化。我希望它们具有不同的类型。我已经对问题进行了这些更改,请检查一次..我不知道这是否可能,因为我对 xsd 完全陌生.. 谢谢 :) 很抱歉给您带来麻烦..
  • 所以Val元素的内容可以是字符串也可以是dateTime。属性“name”还是唯一的吧?
【解决方案3】:

试试这个 XSD

<?xml version="1.0"?>
<xs:schema id="Info" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="Info" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
  <xs:choice minOccurs="0" maxOccurs="unbounded">
    <xs:element name="Val" nillable="true">
      <xs:complexType>
        <xs:simpleContent msdata:ColumnName="Val_Text" msdata:Ordinal="1">
          <xs:extension base="xs:string">
            <xs:attribute name="name" type="xs:string" />
          </xs:extension>
        </xs:simpleContent>
      </xs:complexType>
    </xs:element>
  </xs:choice>
</xs:complexType>

【讨论】:

  • 非常感谢......我会试试这个并回复你......:D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-06
  • 2010-10-21
  • 2011-08-02
  • 2013-12-08
  • 1970-01-01
  • 2012-12-02
相关资源
最近更新 更多