2012-03-08 3 views
1

XFormsを使用して、XML-DB eXist-dbをバックエンドとして使用してWebアプリケーションを構築しています。 eXistはXFormsコードをHTMLとJavaScriptに変換します。私は「結果」インスタンス内のすべての<ServiceDefinition>の要素を反復処理するxf:repeatを使用して、テーブルを構築したいXForms repeat - JavaScriptエラー

<xf:instance xmlns="" id="results"> 
    <result> 
    <ServiceDefinition> 
     <InventoryLabel LastChange="2012-01-24">SVC380712435</InventoryLabel> 
     <SystemName IPaddress="111.222.333.123">XXX</SystemName> 
     <Service ServiceCategory="Internetservice">Web-Server</Service> 
     <OSClass OperatingSystem="CentOS">UNIX</OSClass> 
     <SystemType Manufacturer="VMware">VM</SystemType> 
     <Backup/> 
     <Location SystemContact="Max Power" AdminGroup="power">N22</Location> 
    </ServiceDefinition> 
    .... 
    </result> 
</xf:instance> 

<xf:instance xmlns="" id="domain"> 
    <system name="XXX"> 
    <NIC MAC="00-50-56-ae-00-3c" 
     time="1329167846" missed="1323350247" state="inactive" 
     IP="111.222.333.123" LAN="Test"/> 
    </system> 
    ... 
</xf:instance> 

まず第一に、私は2つのインスタンスを得ました。すべての行には、「ドメイン」インスタンスから関連する「状態」情報を入力する「ステータス」列が含まれています。

これは、テーブルのXFormsのコードです:

<div class="table"> 
    <table border="0"> 
     <thead> 
      <tr> 
      <th class="sysName">Hostname</th> 
        <th class="services">Service</th> 
        <th class="os">OS Class</th> 
        <th class="location">Location</th> 
        <th class="link">Details</th> 
        <th>Status</th> 
       </tr> 
       </thead> 
       <tbody> 
       <xf:repeat nodeset="instance('results')/result/ServiceDefinition" id="link-repeat"> 
       <tr> 
        <td class="sysName"><xf:output ref="SystemName" /></td> 
        <td> 
        <xf:repeat nodeset="Service" class="row"> 
         <div> 
         <xf:output ref="."/> 
         </div> 
        </xf:repeat> 
        </td> 
        <td class="os"><xf:output ref="OSClass"/> </td> 
        <td class="location"><xf:output ref="Location" /></td> 
        <td class="link"> 
        <xf:trigger submission="view-entry" appearance="minimal" class="url"> 
         <xf:label>View</xf:label> 
         <xf:action ev:event="DOMActivate"> 
         <xf:setvalue ref="instance('URL-container')" 
            value="concat('serviceDetails.xql?svc=', instance('results')/result/ServiceDefinition[index('link-repeat')]/InventoryLabel)"/> 
         <xf:load ref="instance('URL-container')" /> 
         </xf:action> 
        </xf:trigger> 
        </td> 
        <td> 
        <xf:output ref="instance('domain')/system[@name = instance('results')/result/ServiceDefinition[index('link-repeat')]/SystemName]/NIC/@state" /> 
        </td> 
       </tr> 
       </xf:repeat> 
       </tbody> 
    </table> 
    </div> 

問題は、この部分のようだ:

<td> 
    <xf:output ref="instance('domain')/system[@name = instance('results')/result/ServiceDefinition[index('link-repeat')]/SystemName]/NIC/@state" /> 
</td> 

はこの表現に何か問題はありますか?私は、repeatステートメントの現在のノードと一致するシステムの状態属性を取得したい。常に異なります(この場合は771で)

A script on this page may be busy, or it may have stopped responding. You can stop the script now, or you can continue to see if the script will complete. 
Script: http://test:8080/exist/xforms/xsltforms/xsltforms.js:771* 

ライン:私はページと「results'-インスタンスは、多くの項目で構成されてロードするとき は、しかし、私は、JavaScriptのエラーが発生します。

結果インスタンスが非常に小さい(約20要素まで)場合、期待どおりに動作します。

何か助力やご意見をいただければ幸いです。

答えて

0

XSLTFormsには独自のXPathエンジンがJavaScriptで書かれているため、多くのノード、特に古いバージョンのInternet Explorerをナビゲートする必要があるエクスプレッションをブラウザーで評価するのが遅い場合があります。

パフォーマンスは最近改良されました。あなたはsourceforge.netのXSLTFormsのSVNリポジトリで最新のビルドを試してください。

id()機能を使用すると、評価時間を大幅に短縮することができます。

インスタンスに読み取り専用データのみが含まれているかどうかを示すXSLTForms固有の拡張もあります。

時間測定を行うにはプロファイラーを試しましたか(F1キーを最初に押してください)?

関連する問題