给定一个 XML 文件和关联的 XSD,我想查找该 XML 实例中元素的 XSD



我正在开发一些软件,它可以生成一个用户界面,用于将数据输入到一个非常复杂的XML文件中。我有一个输入文本文件,它描述了要向用户显示的GUI字段,以及XML文件中元素存储的XPath。例如,给定以下XML:

<rootDoc>
    <A>
        <B someAttr="Hello"/>
   </A>
</rootDoc>

我可能会显示一个带有XPath为"/a/B/@someAttr"的文本框的GUI字段。通过这种方式,我知道从哪里读取原始值以显示在文本框中,然后当用户单击"确定"时,我也知道将其存储回哪里。这一切都很好,我让它发挥作用。现在是问题-

有大量的XSD描述了XML文件的结构、需要哪些字段以及字符串字段的数据(即,最大字段长度等)

<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>

现在,假设我知道GUI字段的XPath是/A/B/@someAttr,那么在.NET中是否有某种方法可以获得与@someAtter关联的XSD元素?例如,我会使用它来验证字段的格式是否正确;我也可以根据需要"标记"GUI字段,等等。注意,我不是在寻找如何根据XSD验证XML——我希望在显示GUI时进行"处理",这样我就可以立即在GUI上标记所需字段,或者将最大字段长度设置为XSD中表示的长度,等等。

请注意,我是用C#编写的,所以我很感激.NET特定的指针。

编辑:另一种说法可能是,"给定一个XSD,以及一个表示从该XSD所描述的XML中选择的元素或属性的xpath,有没有办法获得表示该元素或属性模式的XSD块,该模式将由xpath表达式选择?"

这是一个看起来很简单的问题,但事实并非如此。将架构类型分配给标记的过程称为"类型关联",它对标记出现的上下文很敏感。事实证明,除非您从文档的开始到标记出现的点执行模式验证,否则您无法预测哪种模式类型应用于特定标记。

W3C联盟(XML和XMLSchema规范的作者)已经指定了XML处理器应该如何公开其类型关联信息。该信息被称为"架构后验证信息集"或简称PSVI。

看起来.Net中似乎支持PSVI:https://msdn.microsoft.com/en-us/library/system.xml.schema.extensions%28v=vs.110%29.aspx

最新更新