3

次の部分的なxpath式があります

IAAXML:party[@xsi:type='IAAXML:Organization']

私のソースXMLは次のとおりです。

<IAAXML:party xsi:type="IAAXML:Organization">

名前空間がそのように宣言されている場合:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

次のエラーが発生します。

The operand types are not compatible for the = operator

名前空間を使用してその属性を比較するにはどうすればよいですか?

4

2 に答える 2

4

JLRisheは本質的にあなたに答えを与えました、しかし私はそれを増幅します。xsi:type属性のタイプはQNameです。したがって、スキーマ対応プロセッサでは、比較はQNameと文字列の間の型付き比較であり、非常に正当な理由から許可されていません。結局のところ、アプリケーションロジックは、ソースドキュメントが作成者が選択した他のプレフィックスではなく名前空間プレフィックスIAAXMLを使用しているという事実に実際に依存するべきではありません。タイプ対応プロセッサを使用している場合は、QNameの比較を行う方がよいでしょう。

[@xsi:type = QName("http://the-iaaxml-namespace/", "Organization")]
于 2013-01-31T22:58:46.887 に答える
2

Michael Kayはこの問題の原因をより徹底的に説明しましたが、私が推測したように、特定のプロセッサはxsi:type属性をスキーマタイプへの参照として扱います(Michaelが明確にしたように、QNameによって識別されます)。そのため、プロセッサでは文字列値と比較することはできません。ソースドキュメントとその文字列値の両方でそのタイプの名前空間に同じ名前空間プレフィックスを使用していると仮定すると、これは機能するように聞こえます(どのプロセッサでも機能するはずです)。

IAAXML:party[string(@xsi:type) = 'IAAXML:Organization']

しかし、名前空間URIでQNameを使用するというマイケルの提案は、あなたのようなスキーマ対応プロセッサではより堅牢なアプローチになります。

于 2013-02-01T03:49:09.973 に答える