3

我知道通常人们使用/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:keyxs: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:fieldtag

起初我认为我应该指定<xs:field xpath="text()"/>引用节点的文本内容,但是当我这样做时,我从OxygenXML收到一条错误消息。

c-general-xpath:表达式“text()”对于 XML Schema 支持的 XPath 子集无效。

我收到了 , 和其他一些类似消息的类似child::text()消息./text()。通过使用单个点来引用当前节点,我已经摆脱了错误消息,但我不知道是否.是要使用的正确表达式。

那么我应该在xs:field标签中放什么?

4

1 回答 1

0

答案确实<xs:field xpath="."/>是在这篇文章中使用。

于 2021-09-15T10:05:16.710 回答