我知道通常使用/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
标记。
起初我以为我应该指定<xs:field xpath="text()"/>
来引用节点的文本内容,但是当我这样做时,我会收到来自OxygenXML的错误消息。
c-general-xpath:表达式'text()'对于XML Schema支持的XPath子集无效。
我收到child::text()
,./text()
和其他类似消息的类似消息。我通过使用单个点来引用当前节点来摆脱错误消息,但我不知道.
是否是正确的表达式。
那么我应该在xs:field
标记中添加什么内容?