获取C#中的XSD元素列表

时间:2011-12-07 17:41:12

标签: c# xsd

我有一个XSD文件,想要获取其中所有元素的名称列表。我不是指<xs:sequence>之类的东西,只是“真实的东西”,实际上可以出现在XML中,根据XSD有效。

3 个答案:

答案 0 :(得分:1)

真实的东西有点模糊

但是如果你只是想要所有的元素它只是一个Xpath。

如果你想要一棵树,那你就无法避免序列等。 如果你有像xs:choice这样的东西你就会有更多的问题。

然后是属性......

来自SimpleContent或ComplexType ...

可能更容易从xsd生成“空白”xml文档,然后从中获取您想要的内容。不过,这也是一大堆代码。可能是一个躺在你身边的人可以借钱。

答案 1 :(得分:1)

如果您实际上不想从代码中执行此操作,则可以使用XML Schema Definition Tool (Xsd.exe)为运行时对象创建源代码。

从那里,您可以使用Xml序列化为您的给定Xsd架构创建有效的Xml示例。

答案 2 :(得分:0)

由于您正在尝试为此编写代码,我假设您要反复对不同的XML Schema文件执行此操作;如果是真的,那么理解你是否真的必须在代码库中嵌入它,或者它是否可以用作外部工具是很重要的。

如果您真的想要这样做,最需要的是System.Xml.Schema包。从XmlSchemaSet开始加载并编译XSD文件。然后使用GlobalElements上的迭代器,遍历可以在XML文档中显示为根元素的全局元素,并遍历这些元素(根据需要使用PSVI属性);正如别人提到的那样,会有类型,合成器等;然后还有更多:抽象元素(那些不能在XML中显示,既不是对抽象元素的引用,也不是对替换组的成员的引用),禁止的属性,受限制的类型等。

我最近回答another post可能与您的需求有关;您发布的XML Schema可能如下所示:

root/ship/engine/@MaxSpeed,A,1..1,True
root/ship/crew/@function,A,1..1,True
root/ship/@Name,A,1..1,True
root/ship/@class,A,1..1,True
root/ship/special_abilities/hull/@separable,A,0..1,False
root/ship/special_abilities/hull/@canCarryWesley,A,0..1,False
root/ship/special_abilities/hull/@capableOfLanding,A,0..1,False

如果需要,您只能处理第一列;生成的XPath仅显示具有数据的那些项(元素或属性);处理上述内容可能要容易得多(使用/分割字符串,元素除了@等等)