带有一个xml子项的XSD元素,然后是内容(包括html / xml)

时间:2011-01-05 20:26:33

标签: c# xml xsd

我有一个包含一些html的xml文档。

<begin-line>
    <verse-num>6</verse-num>a mixed people<footnote id="f2">
        Or <i>a foreign people</i>; Hebrew <i>a bastard</i>
    </footnote> shall dwell in Ashdod,
</begin-line>

verse-num元素是我唯一没有验证过的元素,其余的我想要知道一个字符串类型的大组,它可以包含h​​tml,有时还有一些xml(如脚注)。

这是我现在拥有的架构,它没有做到这一点。

<xs:element maxOccurs="unbounded" name="begin-line">
    <xs:complexType mixed="true">
        <xs:sequence minOccurs="0">
            <xs:choice maxOccurs="unbounded">
                <xs:element name="verse-num">
                    <xs:complexType>
                        <xs:simpleContent>
                            <xs:extension base="xs:unsignedByte">
                                <xs:attribute name="begin-chapter" type="xs:unsignedByte" use="optional" />
                            </xs:extension>
                        </xs:simpleContent>
                    </xs:complexType>
                </xs:element>
            </xs:choice>
        </xs:sequence>
        <xs:attribute name="class" type="xs:string" use="optional" />
    </xs:complexType>
</xs:element>

我正在使用XSD.exe生成一个类,我可以将此垃圾反序列化为。

它正在生成一个在其下面带有verse-num类型的开始行对象,还有一个文本数组,它们被内部的html / xml标记分割。

我需要的是一个xsd,可以被XSD.exe用来生成一个开头行类,它将给我一个verse-num类型,然后一个字符串属性将包含其余内容(包括文本) ,我是,b,脚注,xml / html)。

我做了一些研究,似乎processContents会做的伎俩,但我无法弄清楚把它放在哪里。

当谈到它时,我想对这个XSD.exe创建的对象进行编程。

var beginLine = new crosswaybiblePassageVerseunitBeginline();
Console.WriteLine((beginLine.Items[0] as crosswaybiblePassageVerseunitBeginlineVersenum).Value);
Console.Write(beginLine.Text);

或者甚至......

var beginLine = new crosswaybiblePassageVerseunitBeginline();
Console.WriteLine(beginLine.Versenum.Value);
Console.Write(beginLine.Text);

1 个答案:

答案 0 :(得分:1)

我不确定如何设置架构以便它可以提供来自XSD.exe的良好输出,但您可以使用具有以下定义的类型在输出中指定“任意数量的具有任何名称的元素”: p>

<xs:complexType name="AnyChildren">
    <xs:sequence>
        <xs:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##any"/>
    </xs:sequence>
    <xs:anyAttribute />
</xs:complexType>

例如验证:

<Module>
   <Title>Hello World</Title>
   <ProviderType>xyz</ProviderType>
   <Content />
   <MoreContent />
</Module>

您可以使用:

<xs:complexType name="Module">
    <xs:sequence>
        <xs:element name="Title" type="xs:string" maxOccurs="1" />
        <xs:element name="ProviderType" type="xs:string" minOccurs="1" nillable="false" />
        <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded" namespace="##any"/>
    </xs:sequence>
    <xs:anyAttribute />
</xs:complexType>