XSLT 2または3の処理があり、XSLテンプレートにパラメータとして単一の文字列を渡します。この仕事のために、<person>
の要素を複数のXML文書で見つけ出すために使用される姓を渡しています。<nL>
という名前ですが、最後に要素が渡されたパラメータと一致します。これは動作しますが、カンマで区切ったパラメータを渡せるようにXPATH式を変更したいと思います。たとえば、surname = "Johnson"を渡すことができますが、surname = "Johnson、Johnston"を渡すことができます。XPATHの述部で変数の値を一致させる方法
私はJavaで最新のSaxonプロセッサを使用しています。私はすべての-sources.xmlのは、他のXMLファイルのXMLフォーマットさリストである
java net.sf.saxon.Transform -s:all-sources.xml -xsl:xsl/index-person-param.xsl surname="Johnson"
で変換を呼び出します。
もっと必要な場合を除いて、私は自分のコードの小さな部分だけを含めます。これはおそらく私が理解していない単純なXPATHの問題です。
は、現在、私のテンプレートの試合前に、私は次の変数
<xsl:variable name="nameMatch" select="document(/files/file/@filename)//person[nL = $surname]"/>
この作品にマッチし<person>
の要素を見つける
<xsl:param name="surname" as="xs:string" required="yes"/>
このパラメータの宣言を持っている場合$姓変数は1ワードの文字列です。 $ surnameにカンマで区切られた2つ以上の単語を含めることができるように、上記の述語をどのように変更できますか?
tokenize()
とを使用していくつかの変更を試みましたが、まだ解決策が見つかりませんでした。 おかげで、 マイケル
これらのいずれかを試しましたか?https://stackoverflow.com/questions/6357166/how-to-compare-against-multiple-strings-in-xslt – Lesiak
私があなたが提供したスレッドを検索し、解決策を見つけました。 'select ="ドキュメント(/ files/file/@ filename)// person [nL = $ surname] ''を 'select ="ドキュメント(/ files/file/@ filename)に変更しました// person [matches (nL、$ surname)] ""これは私に望ましい結果を与えます。助けてくれてありがとう – Sawtooth67