.net 给定一个XML文件和相关的XSD,I';我想在那个XML实例中找到元素的XSD
我正在开发一些软件,生成一个用户界面,将数据输入到一个非常复杂的XML文件中。我有一个输入文本文件,描述要向用户呈现的GUI字段,以及XML文件中元素存储的XPath。例如,给定以下XML:.net 给定一个XML文件和相关的XSD,I';我想在那个XML实例中找到元素的XSD,.net,xml,xpath,xsd,.net,Xml,Xpath,Xsd,我正在开发一些软件,生成一个用户界面,将数据输入到一个非常复杂的XML文件中。我有一个输入文本文件,描述要向用户呈现的GUI字段,以及XML文件中元素存储的XPath。例如,给定以下XML: <rootDoc> <A> <B someAttr="Hello"/> </A> </rootDoc> 我可能会显示一个带有XPath为“/a/B/@someAttr”的文本框的GUI字段。通过这种方式,我知道从
<rootDoc>
<A>
<B someAttr="Hello"/>
</A>
</rootDoc>
我可能会显示一个带有XPath为“/a/B/@someAttr”的文本框的GUI字段。通过这种方式,我知道从何处读取原始值以显示在文本框中,然后当用户单击“确定”时,我还知道在何处存储原始值。这一切都很好,我已经让它工作了。现在回答问题-
有大量的XSD描述XML文件的结构、需要哪些字段以及字符串字段的数据(例如,最大字段长度等)。因此,对于我上面非常简单的示例,可能会有如下XSD(很抱歉,如果这不是有效的XSD,我只是想让大家了解一下……):
现在,假设我知道GUI字段的XPath是/A/B/@someAttr,那么在.NET中是否有某种方法可以获取与@someAttr关联的XSD元素?例如,我会使用它来验证字段的格式是否正确;我还可以根据需要“标记”GUI字段,等等。请注意,我不是在寻找如何根据XSD验证XML——我希望在显示GUI时进行“处理”,以便我可以立即在GUI上标记所需字段,或者将最大字段长度设置为XSD中指示的字段长度,等等
请注意,我是用C#编写的,因此希望使用.NET特定的指针
Edited:另一种表述方式可能是,“给定一个XSD和一个表示从该XSD描述的XML中选择的元素或属性的xpath,有没有办法获取表示xpath表达式将选择的元素或属性的模式的XSD块?”这是一个看似简单但并非如此的问题。将模式类型分配给标记的过程称为“类型关联”,它对标记出现的上下文非常敏感。事实证明,除非从文档开始到标记出现的位置执行模式验证,否则无法预测应用于特定标记的模式类型 W3C联盟(XML和XML模式规范的作者)已经指定了XML处理器应该如何公开其类型关联信息。该信息简称为“模式验证后信息集”或PSVI
似乎.Net中支持PSVI:您可以动态查找它,但它可能会变得混乱,例如类型B的节点C。类型可以嵌套。节点可以有本地限制。节点名称可能不够,例如,对于不同的父级/路径,名为item的元素可能不同。我们要做的是解析xsd并建立一个树,这样您就可以跳过元素/复合类型、序列、元素等。一个简单的xsd,您可能会侥幸逃脱,一个有人精神失常、缓慢和痛苦的xsd,特别是如果您有选择元素的话。\p如果可行,唯一的元素名称将有帮助。e、 g.没有订单/项目和发票/项目
<schema>
<complexType name="B">
<complexContent>
<attribute name="someAttr" use="required"/>
</complexContent>
</complexType>
<complexType name="A">
<sequence>
<element name="B" type="B" minOccurs="0"/>
</sequence>
</complexType>
</schema>