我知道通常人们使用/the/path/to/a/node/text()
提取字符串值。这还不足以解决我的问题。
我正在使用 XML Schema 1.0 版来定义一些文档类型。我正在尝试keywords
为文档类型创建一个非常简单的部分。所以我首先创建了一个非常简单的复杂类型。
<xs:complexType name="KeywordsList">
<xs:sequence>
<xs:element name="tag" type="xs:token" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
所以现在我有一个类型,它可以包含任意数量的包含xs:token
值的元素的列表。我的问题始于如何禁止重复的问题。
我已经经常使用这个非常微不足道的任务xs:key
,xs:unique
但我只为属性值或更深层嵌套的元素做过它。例如,如果关键字值存储在一个名为的属性中,value
我知道我可以做这样的事情。
...
<xs:element name="keywords" type="KeywordsList">
<xs:unique name="KeywordsListUnique">
<xs:selector xpath="child::tag"/>
<xs:field xpath="@value"/>
</xs:unique>
</xs:element>
...
真正让我感到困惑的是,这<xs:selector xpath="child::tag"/>
足以让 XML 解析器定位这些值,但我必须至少包含一个xs:field
tag。
起初我认为我应该指定<xs:field xpath="text()"/>
引用节点的文本内容,但是当我这样做时,我从OxygenXML收到一条错误消息。
c-general-xpath:表达式“text()”对于 XML Schema 支持的 XPath 子集无效。
我收到了 , 和其他一些类似消息的类似child::text()
消息./text()
。通过使用单个点来引用当前节点,我已经摆脱了错误消息,但我不知道是否.
是要使用的正确表达式。
那么我应该在xs:field
标签中放什么?