我有一个XSD文件,想要获取其中所有元素的名称列表。我不是指<xs:sequence>
之类的东西,只是“真实的东西”,实际上可以出现在XML中,根据XSD有效。
答案 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仅显示具有数据的那些项(元素或属性);处理上述内容可能要容易得多(使用/分割字符串,元素除了@等等)