gpt4 book ai didi

xml - 如何使用模式根据属性值验证元素?

转载 作者:数据小太阳 更新时间:2023-10-29 02:55:37 25 4
gpt4 key购买 nike

我要验证的 XML 如下:

<root>
<element attribute="foo">
<bar/>
</element>
<element attribute="hello">
<world/>
</element>
</root>

如何使用架构对其进行验证?

注意:

attribute="foo" 时,

element 只能包含 bar

attribute="hello"

时,

element 只能包含 world

最佳答案

您不能在 XML Schema 1.0 中执行此操作。在 XML Schema 1.1 中,您将能够使用 <xs:assert> element去做,但我猜你想要一些你现在可以使用的东西。

您可以使用 Schematron作为第二层验证,允许您测试关于 XML 文档的任意 XPath 断言。有一篇关于 embedding Schematron in XSD 的相当古老的文章您可能会觉得有帮助。

你会做类似的事情:

<rule context="element">
<report test="@attribute = 'foo' and *[not(self::bar)]">
This element's attribute is 'foo' but it holds an element that isn't a bar.
</report>
<report test="@attribute = 'hello' and *[not(self::world)]">
This element's attribute is 'hello' but it holds an element that isn't a world.
</report>
</rule>

或者您当然可以切换到 RELAX NG ,它在 sleep 中这样做:

<element name="element">
<choice>
<group>
<attribute name="attribute"><value>foo</value></attribute>
<element name="bar"><empty /></element>
</group>
<group>
<attribute name="attribute"><value>hello</value></attribute>
<element name="world"><empty /></element>
</group>
</choice>
</element>

关于xml - 如何使用模式根据属性值验证元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/184663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com