我应该在xs:field中使用什么XPath表达式来选择元素内容?

时间:2017-08-13 19:44:48

标签: xml xpath xml-parsing xsd-1.0

我知道通常使用/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:field标记

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

  

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

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

那么我应该在xs:field标记中添加什么内容?

0 个答案:

没有答案