我有一个XSD文件,并希望获取其中所有元素的名称列表。我并不是指像<xs:sequence>
等东西,只是“真正的东西”,它实际上可以出现在XML中,根据XSD有效。获取C#中的XSD元素列表
回答
真正的东西是有点含糊
但是,如果你只是想希望所有的元素,它只是一个的XPath它。
如果你想要一棵树,那么你不能避免序列等。 如果你有像xs:choice这样的东西,那么你有更多的问题。
然后还有属性...
从简单文本类型或复合...
可能会更容易产生从XSD一个“空白”的XML文档,然后得到你想要出什么。尽管如此,这仍然是一大块代码。可能是一个躺在你身边可以借用。
我不需要树,没有xs:xhoice,没有属性 – Ondrej
这是一个简单的xpath查询每个元素节点的名称属性,然后,看不出为什么问题值得付出更多的努力。 –
如果您实际上不想从代码执行此操作,则可以使用XML Schema Definition Tool (Xsd.exe)为运行时对象创建源代码。
从那里您可以使用Xml序列化为您给定的Xsd模式创建有效的Xml示例。
由于您正在尝试为此编写代码,因此我会假设您要对不同的XML模式文件进行反复处理;如果这是真的,那么理解你是否真的需要将它嵌入到你的代码库中,或者如果它可以用作外部工具,那将是非常重要的。
如果你真的想这样做,最需要的是在System.Xml.Schema包中。从XmlSchemaSet开始加载和编译您的XSD文件。然后使用GlobalElements上的迭代器,遍历全局元素,这些元素可以显示为XML文档中的根元素并遍历这些元素(为了您的需要,使用PSVI属性);就像其他人提到的那样,会有类型可以通过,合成器等等。然后还有更多:抽象元素(那些不能用XML显示,既不是抽象元素的引用,也不是替代组的成员),禁止属性,限制类型等与你的需求有关;您发布的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只显示具有数据的项目(元素或属性);处理类似上述可能会更容易(使用/分割字符串,元素除@之外)
- 1. 代表XSD中的元素列表
- 2. C++列表,获取列表中的元素数量?
- 3. vb.net - 获取XSD架构元素的Xpath
- 4. 获取列表中的单个元素
- 5. 定义XSD架构元素的列表
- 6. 解析XSD并获取嵌套元素
- 7. Prolog - 从列表中获取元素
- 8. 机制,从列表中获取元素
- 9. 从python列表中获取元素
- 10. 在方案中获取元素列表
- 11. SML:从列表中获取元素
- 12. 从列表中获取元素
- 13. Prolog在子列表中获取元素
- 14. Lisp从列表中获取元素
- 15. 从方案列表中获取元素
- 16. 从列表中获取元素ocaml
- 17. C#:获取列表中最有发生的元素?
- 18. jQuery的:如何获取列表元素
- 19. lxml - 获取元素的平面列表
- 20. 获取列表元素的属性
- 21. jQuery +获取元素列表的父母
- 22. 从C#列表中获取前几个元素#
- 23. 在C接口中从Prolog获取列表元素
- 24. UIWebView中获取表元素
- 25. 如何获取列表中的列表框元素? wxpython
- 26. 获取的元素列表,从列表框中网站
- 27. 从SoapUI列表中获取元素对Groovy列表的响应
- 28. Haskell - 如何获取列表中的列表元素?
- 29. Apache Xerces获取xsd中每个元素的声明
- 30. 从列LINQ c获取数据表的所有行元素#
您可以请包括您尝试处理的XSD文件的示例吗? –
确定:http://www.uloz.to/11605646/ships-xsd(如果网站不是英文的,右上角有一些语言切换) – Ondrej
如果所有其他的都失败了,请记住XSD本身就是XML ,所以你可以阅读它并手动提取你需要的信息。 –