1

伙计们

我正在使用 schematron,我需要执行以下操作:

有时在我想要验证的 xml 文档中,有这样的元素:

<Var.X name="B">

对于这些元素(其中 name() 中间有一个点),我需要在 xml 文件中查看是否有一个名为 Var 的目录,其子元素具有属性 name = X (在这种情况下),如下所示:

<Var>
   <Obj name="X">
</Var>

我想将这些对象的 name() 转换为表示路径的字符串,因此对于这种情况尤其如此:

Var.X 将是 /*/Var/child::*[@name="X"]

有了这个字符串,然后我想检查实际上是否存在属于字符串所代表的路径的元素,但是我不能将字符串转换为路径类型,我什至不知道这是否可能......

有没有更简单的方法来做到这一点?

4

2 回答 2

1

您也可以在没有 saxon-Extension 的情况下使用 name-function!

<rule context="*[matches(name(),'\w\.\w')]">
    <let name="beforePoint" value="substring-before(name(),'.')"/>
    <let name="afterPoint" value="substring-after(name(),'.')"/>
    <assert test="/*/*[name() = $beforePoint]/*[@name=$afterPoint]">error message</assert>
</rule>
于 2013-02-09T09:48:28.257 回答
0

我已经意识到我想要实现的是用 saxon:evaluate 函数完成的......而且我已经实现了我想要的

于 2013-02-08T22:26:15.160 回答