2012-01-01 11 views
-1

XSLT 1.0を使用して、4つのノードセットをA、B、C、Dの順に処理したい。単一の(または少なくとも管理不可能な)XPath式。処理中のツリー内のノードに値を代入する

私はAをしたいすべてのノード、私がBのようになりたいすべてのノードなどにスワップスルーし、すべてのノードにタグを付けて、後ですべてのAを選択できるようにしますノード、すべてのBノードなど

また、後でリストに追加することもできます。

処理中のファイルに属性を作成できません。 (右?)変数はあまりにも早くスコープから外れます。鍵を使った何か?すべてのA、すべてのBの鍵?しかし、キーが作成されたら、キーテーブルにノードを追加することはできますか?

XPathを保存する方法はありますか?

これを行うための簡単な方法はありますか、ノードセットのそれぞれを選択するたびに、厄介でひどいエラーが発生しやすく、ひどく維持されるXpath式を作成する必要がありますか?

+1

があまりにも一般的なようです - - 1つの質問に対する答えとしてすべてのXPathとXSLTを学習する予定ですか?もしそうなら、最良の答えは:XSLT/XPathに関する良い本を入手して読んでください。ここにいくつかの最高のリソースへのリンクがあります:http://stackoverflow.com/questions/339930/any-good-xslt-tutorial-book-blog-site-online/341589#341589 –

+1

あなたはXSLTは宣言型言語であり、手続き型ソリューションを許可しないため、あなたは不満を感じています。あなたが解決しようとしている問題を私たちに説明しようとすると(解決への手続き的なアプローチではなく)、あなたを助けることができるかもしれません。 –

+0

マイケルに感謝します。クライアントサイドの変換では、複雑なXPath式で定義された4つのノードセットを順番に処理します。 HTMLをレンダリングしながら、同じ4つのセットを何度も処理する必要があります。 4つのセットを処理する必要があるたびに、XSLでXPath式を繰り返さないようにするにはどうすればよいですか? – JPM

答えて

0

解決方法:グローバル変数、このように:その後、後で

<xsl:variable name="A" select="//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:title" /> 
<xsl:variable name="B" select="//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:author" /> 
<xsl:variable name="C" select="//tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:sponsor | 
           //tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:funder  | 
           //tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:principal | 
           //tei:teiHeader/tei:fileDesc/tei:titleStmt/tei:respStmt | 
           //tei:teiHeader/tei:fileDesc/tei:editionStmt    | 
           //tei:teiHeader/tei:fileDesc/tei:extent     | 
           //tei:teiHeader/tei:fileDesc/tei:seriesStmt" /> 
<xsl:variable name="D" select="//tei:teiHeader/tei:fileDesc/tei:notesStmt/tei:note" /> 

は:

<xsl:call-template name="writeMetadata"> 
    <xsl:with-param name="rowitems" select="$A" /> 
</xsl:call-template> 
<xsl:call-template name="writeMetadata"> 
    <xsl:with-param name="rowitems" select="$B" /> 
</xsl:call-template> 
<xsl:call-template name="writeMetadata"> 
    <xsl:with-param name="rowitems" select="$C" /> 
</xsl:call-template> 
<xsl:call-template name="writeMetadata"> 
    <xsl:with-param name="rowitems" select="$D" /> 
</xsl:call-template> 

は、XPath式を繰り返す必要がなく、何度でも繰り返し。

(マイケル、あなたのコメントdpawson.co.ukに掲載「人々は、多くの場合、グローバル変数の定義は、ソースドキュメントを、参照できることを認識することができない」、私は右のエリアに見てました。)

+0

また、グローバルでもあるキーを追加し、XPathクエリでツリーに設定することもできます。その一例がここにあります:http://stackoverflow.com/questions/8703217。 – JPM

関連する問題