【问题标题】:What XPath expression should I use in xs:field to select element content?我应该在 xs:field 中使用什么 XPath 表达式来选择元素内容?
【发布时间】:2021-09-15 18:05:16
【问题描述】:

我知道通常使用/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>
...

真正让我困惑的是&lt;xs:selector xpath="child::tag"/&gt; 足以让 XML 解析器找到值,但我必须至少包含一个 xs:field 标签

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

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

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

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

【问题讨论】:

    标签: xml xpath xml-parsing xsd-1.0


    【解决方案1】:

    答案确实是使用&lt;xs:field xpath="."/&gt;,就像this post一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2011-08-16
      • 2019-12-14
      • 2020-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多