-1

私はxsdが初めてです。私のxmlが次のようになるようにxsdを作成しようとしています..

<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」を作成する方法が1つ思い浮かびます...どうにかして作っても、私はリストエラーのリストを取得します..どうすればそれを管理できますか?

私は実際にこの xsd を書いているので、Excel のデータを xml に変換できます..私の Excel について何かを追加するには、1 つの行が 1 つの列が Info であるセットです (最悪の場合:| Val が 3 つあるため) 1 つの情報) ...

最初はこのxmlが間違っていると思っていましたが、間違っていました..これは標準出力/入力xmlです..

これを達成するための助けはかなりのものです。

前もって感謝します.. :)

4

3 に答える 3

1

この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> 

于 2012-04-20T19:08:02.593 に答える
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には、文字列値 (<xs:simpleContent>および<xs:extension base="xs:string">) と、可能な値がおよびnameの 3 つしかない属性も含まれます。n_1n_2n_3

正確な要件に応じて、Valコンテンツのタイプで遊ぶことができます-たとえば、特定の最大長の文字列であることを指定します。同様に、name属性値の制限を変更できます (または制限なし)。

于 2012-04-20T16:56:20.980 に答える
0

この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>

于 2012-04-20T16:54:20.053 に答える