2011-12-16 4 views
0

XMLフィードのデータを定期的にチェックして処理し、ユーザーに通知するなどの適切な処置をとるアプリケーションを開発する必要がありますが、主にレポートの生成と表示に使用されます。このXMLフィードは基本的にアプリケーションの稼働時間、ダウンタイムをチェックします。私は自分のサーバーに遠隔地からXMLファイルをダウンロードしています可変数のパラメータをXSLTに渡すロジック

  1. :ここ

    は、私は、次の午前の手順です。
  2. プロパティファイルから監視するアプリケーションを確認します。
  3. XSLTを使用してhtmlに変換し、htmlページをメールします。

このXMLフィードには、監視する必要がなく、javaのプロパティファイルを使用してチェックされるアプリケーションも含まれています。監視されているアプリケーションは後で追加できます。

これをxslファイルに含める方法はありますか? (私は、javaからxsltのパラメータも渡すことができますが、パラメータの数は可変です。私はアプリ名をグループ化して2つのパラメータを使用していますが、XMLフィードのイテレータであるxsl:for-eachファイル)

EDIT:

<begin last-update="12/16/2011 06:18:31 am"> 
    <application id="1" name="xyz" last-update="12/16/2011 6:16:03 AM"> 
     <node2 code="normal"> 
      <childnodes></childnodes> 
      <childnodes></childnodes> 
     </node2> 

    </application> 
    <application id="2" name="abc" last-update="12/14/2011 6:16:03 AM"> 
     ... Same as before 
</application> 
</begin> 

これはXMLフィードです。私は以下..このXML ..私は、アプリケーションノードのname属性を確認する必要を反復処理していXSLコードが

<xsl:for-each select="begin/application"> 
<!-- Need this to be fetched dynamically using xsl params --> 
<xsl:if test="@name='abc' or @name=xyz' > 
<tr width="100%" style="border:solid 1px black;"> 
<td style="text-align:center; vertical-align:center;">DATA</td> 
<td style="text-align:center; vertical-align:center;">DATA</td> 
<td style="text-align:center; vertical-align:center;">DATA</td> 
</tr> 
</xsl:if> 

ある現在の属性がハードコードされている名前..私からこれらを使用する必要がありますAPP1ているパラメータ文字列コード - Javaから渡されたパラメータのリストは、 APP2と私はのparamsを反復んどのように私はまた、ITERを必要とするよう質問は、ある

<root> 
<application @name="ABC"></application> 
<application @name="XYZ"></application> 
</root> 

としてノードのパラメータは、設定しますxmlファイルの設定。

答えて

1

なぜJAXBを使用してXMLデータのJava表現を提供しないのですか?その後、プロパティファイル(またはデータベーステーブルのようにプロパティファイルを将来置き換えることができるもの)を使用してJavaコードのデータを再生し、JSP/Velocity/<insert favourite view tech here>

でHTML出力を作成します

これはおそらく、ホーンのすべてをXSLに詰め込むよりも柔軟な設計になるでしょう

1

"複数のパラメータ"を変換に渡す方法は、単一のパラメータ、つまりXML要素(ツリー)を渡すことです。子要素は処理され、変換によって実際の(論理的な)パラメータとして扱われます。

峠このような何か:

<params> 
<param name="p1"> some subtree/<param> 

. . . . 

<param name="pk"> some subtree/<param> 
<params> 
+0

またはXSLT 2.0で、あなたは文字列の配列(または番号などのシーケンス)を渡すことができますが、これができます。今年は –

+0

が試用されました。しかし、役に立たない... しかし、wrokaround、あなたはパラメータ文字列を渡すことができます。 この文字列はdocument()関数を使用してXMLパラメータを取得しますか? 私はそれが二相論理でファイルシステムが必要だと知っていますが、今のところうまくいきます... – Mike

+1

@Mike:おそらく、コマンドラインからパラメータを渡してみるだけです。私が使用している以上のすべてのXSLTプロセッサには、複雑な構造をパラメータとして渡すことを可能にする独自のAPIがあります。解析されたXMLドキュメント全体または個々の要素を含みます。 XSLTプロセッサのドキュメントを読んでください。 –

0

[OK]をので、私はこれを行うことができました。 パラメータを渡す代わりに、XMLファイルを作成し、ドキュメント関数を使用してそのファイルをテンプレートで読み込みました。 このテンプレートは、メイン文書のfor-eachから内部で呼び出されました。 ここでは、テンプレートにパラメータを渡し、XMLファイルを反復処理して、何をすべきかを行いました。

誰かが私のような愚かな状況に悩まされている場合、かなりの時間を投資する前に考えなかった場合に備えて。 JAXBが最適な方法です。 私はJAXBソリューションとその非常に単純な実装を行いました。 しかし、現在xsltが私の要求を満足しているので、私はXSLTを使っています。

XSLTコード: - サクソンに、任意のJavaのIterableがOKである必要があり、あなたのプロセッサのAPIを想定し

​​