检查元素是否没有设置属性?-6ren"> 检查元素是否没有设置属性?-我想问问是否有人知道如何使用 XPath 查询进行 XSD 1.1 条件类型分配检查元素是否没有属性,例如: -6ren">
gpt4 book ai didi

xml - XSD 1.1 条件类型分配 检查元素是否没有设置属性?

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

我想问问是否有人知道如何使用 XPath 查询进行 XSD 1.1 条件类型分配检查元素是否没有属性,例如:

<!--inline alternative type definitions --> 
<element name="TimeTravel" type="TravelType">
<alternative test="@direction='Future'">
<complexType>
<complexContent>
<restriction base="TravelType"
....
<!-- some past travel related elements go here -->
</complexType>
</alternative>
<alternative test="@direction='Past'">
<complexType>
<complexContent>
<restriction base="TravelType"
....
<!-- some future travel related elements go here -->
</complexType>
</alternative>
</element>
OR
<!--Named alternative type definitions -->
<element name="TimeTravel" type="TravelType">
<alternative test="@direction='Future' type="FutureTravelType"/>
<alternative test="@direction='Past' type="PastTravelType"/>
</element>

在此示例中,'alternative test=""' 检查 TimeTravel 元素的属性“direction”的值是“Future”还是“Past”。我应该如何编写 XPath 查询来检查例如当前元素没有“方向”属性?

最佳答案

XPath "@direction"将测试 direction存在当前元素的属性:

<alternative test="@direction" type="DirectionType"/>

XPath "not(@direction)"将测试 direction缺失当前元素的属性:

<alternative test="not(@direction)" type="NoDirectionType"/>

另请注意 alternative/@test可以完全省略属性以提供默认类型。

<alternative type="DefaultType"/>

根据 OP 的后续问题更新以解决 CTA 子集模式

So this <alternative test="@direction='a_value' and not(@another_attribute)"/> is correct and would make it right?

是的,但请注意,您的 XSD 处理器可能默认使用 XPath CTA ( Conditional Type Assignment) 子集。 (例如,Xerces 以及大多数基于 Xerces 的工具都这样做。)如果是这种情况,您将收到如下所示的错误:

c-cta-xpath: The XPath expression 'not(@direction)' couldn't compile successfully in 'cta-subset' mode, during CTA evaluation.

c-cta-xpath: The XPath expression '@direction='a_value' and not(@another_attribute)' couldn't compile successfully in 'cta-subset' mode, during CTA evaluation.

要使用完整的 XPath 2.0 而不是 CTA 子集,请相应地配置您的工具。例如,对于 Xerces,将以下功能设置为“true”:

http://apache.org/xml/features/validation/cta-full-xpath-checking

在 oXygen 中,Options > Preferences > XML > XML Parser > XML Schema 中有一个复选框这将为您控制该功能的值(value)。

使用完整的 XPath 2.0,是的,您可以使用 and按照您在评论中建议的方式。

关于xml - XSD 1.1 条件类型分配 <alternative test =""> 检查元素是否没有设置属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191397/

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