1

検索された名前に基づいてフィールドを除外するために使用しているコードのこのセクションがあります。問題は、ユーザーが入力できる内容に関して少し寛大にする必要があることです。だから私はcontains関数を使用する必要があります。他のコード スニペットで動作するようになりましたが、次のコードでどのように使用できるかわかりません。

var value = stylesheet.evaluate(
                               "//xsl:for-each[@select='book[author="contains(.,'containsSearchTerm')"']",
                               stylesheet, nsResolver,
                               XPathResult.ANY_UNORDERED_NODE_TYPE, null);

引用符/エスケープが少し台無しになっている場合は申し訳ありません。エラーをチェックするための IDE を開いていません。作業の準備をしています。

そのように、containsSearchTerm は、フォームの値を取得し、contains関数を使用して処理したいものです。これはどのように達成されますか?

私は XML、XSLT、および XPath 全般にかなり慣れていないため、可能であれば少し簡略化する必要があることに注意してください。


への返信 マイケル・ケイ -

こんにちは、検索された用語/単語を XSLT テーブル内の author フィールドに適用しようとしています。はい、あなたは正しいです。それが私がやろうとしていることです。スタイルシートを編集し、入力フォーム内で設定した条件を適用します。これまで、ビルド済みの関数を使用してきました。必要に応じて変更します。検索する入力の値をハードコーディングする場合、contain を外部で機能させることができます。ただし、いわば「オンザフライ」で実行したいのですが、私が求めているコンテキストでこれを機能させる方法が本当にわかりません。私が実際に持っているのは、フォーム内に構築されているクエリです-検索するフィールド、オペランド、および検索語を指定します。しかし、文字列全体を検索したくはありません。これは少し柔軟性に欠けるためです。そのため、contains 関数を使用して、検索を柔軟に行えるようにしたいと考えました。

助けてくれてありがとう

4

3 に答える 3

1

あなたは XML と XSLT に慣れていないので、ここでうさぎの穴に落ちていないことを確認しておくとよいでしょう。XPath を使用して XSLT スタイルシートを検索しています。これは非常に高度で野心的なことであり、アプリケーションのコンテキストで理にかなっていることを知っておくとよいでしょう。それで、あなたはどのような問題を解決しようとしていますか?

詳細については、構文的に正しくないコードをリバース エンジニアリングして、あなたの意図を推測する必要がありますが、これは常に困難です。一般的な形式の select 属性を持つ xsl:for-each 命令を探しているのではないでしょうか。

本[著者= ....]

「....」が何であるかにいくつかの制約を課したいのですが、それを超えて、あなたが何をしているのか本当にわかりません。また、「寛容」になりたい場合は、おそらく空白が表示される場所などに空白を許可したいでしょう。正規表現の一致がニーズを満たすかもしれません(正規表現はXPath 2.0で利用可能です)が、本当にわかりません。

于 2011-12-19T09:53:52.640 に答える
0

多くの場合、スタイルシート パラメーターを使用して目的を達成できます。xsl:param を参照してください。パラメータとして単なる検索値以上のものを提供したい場合 (たとえば、検索用語の数が可変の場合)、最良の解決策は xx:evaluate() 呼び出しである場合があります。多くの XSLT プロセッサには、動的に構築および評価される文字列として提供される XPath 式。最後に、実行前にスタイルシートを変更することもオプションです。最も簡単ではありませんが、場合によっては正しい答えです。変更したい要素を見つける最も簡単で柔軟な方法は、それに xml:id 属性を与えることです:

<xsl:for-each select="...." xml:id="point-of-change">
  ...
</xsl:for-each>
于 2011-12-21T10:44:18.760 に答える
0

XPath 式を評価する XSLT スタイルシートに次のフラグメントが含まれている場合:

   <xsl:for-each select=
    "book[contains(author, ZZZZZ)]">

     <!-- Code here. -->
    </xsl:for-each>

xsl:for-each次に、この要素を選択する (存在する場合は、他のそのような要素を選択する可能性がある) 1 つの XPath 式は次のとおりです。

//xsl:for-each
      [
       @select = 'book[contains(author, ZZZZZ)]'
      ]

XSLT ベースの検証:

次の変換の場合:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>

 <xsl:template match="/">
  <xsl:copy-of select=
  "//xsl:for-each
      [@select = 'book[contains(author, ZZZZZ)]'
      ]
  "/>
 </xsl:template>
</xsl:stylesheet>

はこの XML ドキュメントに適用されます:

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
   <xsl:for-each select=
    "book[contains(author, ZZZZZ)]">

     <!-- Code here. -->
    </xsl:for-each>
 </xsl:template>

</xsl:stylesheet>

必要な要素を選択し、結果として出力します

<xsl:for-each xmlns:xsl="http://www.w3.org/1999/XSL/Transform" select="book[contains(author, ZZZZZ)]">

     <!-- Code here. -->
    </xsl:for-each>
于 2011-12-19T14:22:21.753 に答える