Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Xpath在XSD模式中选择节点_Xpath_Xsd_Schema_Selectnodes - Fatal编程技术网

使用Xpath在XSD模式中选择节点

使用Xpath在XSD模式中选择节点,xpath,xsd,schema,selectnodes,Xpath,Xsd,Schema,Selectnodes,我有下面的代码,我希望用它来选择我将需要在特定序列中的所有元素。以下是片段: XmlDocument schema = new XmlDocument(); schema.Load(SchemaFileName); XmlNamespaceManager xnm = new XmlNamespaceManager(schema.NameTable); xnm.AddNamespace("xs", "h

我有下面的代码,我希望用它来选择我将需要在特定序列中的所有元素。以下是片段:

            XmlDocument schema = new XmlDocument();
            schema.Load(SchemaFileName);
            XmlNamespaceManager xnm = new XmlNamespaceManager(schema.NameTable);
            xnm.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
            XmlNodeList list = schema.SelectNodes(Path);
但是,我不确定应该写什么作为路径。理想情况下,我希望选择sequence标记的所有子节点,但当我将路径设置为sequence时,运行它时不会得到任何信息。节点列表是空白的。我要做的是获取验证xml文件所需的元素的名称

此外,当我将路径设置为//@name时,我确实得到了一些东西,它选择了所有以name作为属性的元素。我想要的是序列标签后面的

我还尝试将路径设置为xs:sequence,但这给了我一个错误:需要名称空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数。这很奇怪,因为我以为我已经准备好了

感谢您的帮助!谢谢如果你需要更多的信息,我很乐意提供

真诚地

tf.rz

编辑:我正在使用 Visual Studio C 2008。 .NET3.5SP1


基本前提与我发布的另一个关于datatable列重新排序的问题有关。但是为了缩短解释时间。我只需要说,我只需要xsd模式将按正确顺序验证的元素的名称。我有几个xsd模式,它们都遵循相同的格式,是非常非常静态的文件。因此,我知道我可以安全地查找序列标记并获取其所有子节点。虽然Michael提到有很多方法可以编写模式,但我正在使用的模式在这些方面都是相似的和静态的,因此如果我能够做到这一点,它将在100%的时间内工作=

您的基本问题是需要了解如何使用XPath访问使用名称空间的源文档。这是非常基本的东西,在这个论坛上有一千个答案来解释它。您需要一个前缀名-xs:sequence-并且需要告诉XPath引擎xs前缀表示URIhttp://www.w3.org/2001/XMLSchema -这方面的咒语因XPath引擎而异,恐怕我无法识别代码中的类名,所以我不知道它是哪一个


不过,我认为还有一个更深层次的问题。使用XPath表达式从源XSD文档提取信息有点像尝试使用正则表达式从Java程序提取信息。它会在某些时候起作用;如果你聪明的话,你可以让它在很多时候发挥作用;但它永远不会一直工作,因为编写模式的方法太多了。更好的方法是使用真正的模式处理器处理模式,然后使用其API询问有关模式内容的问题

非常感谢,从理论上讲,这现在更有意义了,但我确实同意使用名称空间是这里的主要问题。我在其他xml文档中轻松地提取了节点列表,没有任何问题。我在我的帖子中添加了一些信息,以帮助你理解我为什么要这么做。这个使用模式处理器的概念引起了我的兴趣,我也将对此做一些研究。这个过程有名字吗?或者它只是使用API来获取模式内容?很抱歉,我对编程相当陌生。