1

彼ら

私はスキーマトロンを使用しており、次のことを行う必要があります。

検証したいxmlドキュメントに、次のような要素がある場合があります。

<Var.X name="B">

これらの要素 (name() の真ん中にドットがある) については、次のように、属性 name = X (この場合) を持つ子要素を持つ Var という名前のディレクトリがあるかどうかを xml ファイルで確認する必要があります。

<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 に答える