2015-04-22 45 views
1

我有一個管道在輸入上運行XSLT,然後通過<p:http-request>步驟將該結果PUT輸入到數據庫中。Xproc:將一個動態href傳遞給<p:http-request>

這裏棘手的一點是,我需要使用來自<p:xslt> XML輸出的元數據來構建動態href。

<p:xslt name="XSLT1"> 
      <p:input port="stylesheet"> 
       <p:document href="XSLT-1.xslt" /> 
      </p:input> 
     </p:xslt> 

    <p:variable name="href" select="concat('http://localhost:8000/myRESTendpoint?uri=/mydb/', /*/@name, /*/@number,'.xml')"/> 

     <p:sink /> 

     <p:insert position="first-child" match="c:body"> 
      <p:input port="source"> 
        <p:inline> 
         <c:request 
          href="{$href}" 
          auth-method="basic" 
          username="user" 
          password="pw" 
          method="put"> 
          <c:body content-type="text/xml" > 
          </c:body> 
         </c:request> 
        </p:inline>    
      </p:input> 
      <p:input port="insertion"> 
       <p:pipe step="XSLT1" port="result" />   
      </p:input> 
     </p:insert> 

    <p:http-request omit-xml-declaration="false" encoding="UTF-8"> 
     <p:input port="source"/> 
    </p:http-request> 

正如你可以在<p:variable>一步看,我試圖建立一個字符串,並從輸出XML與屬性值構造它:

僞這裏我想要實現代碼的<p:xslt>步驟,並將其填充到我的<c:request>步驟的href選項中。

我試着加入<p:attribute match>一步改變<p:http-request>之前href屬性,但它不搶/*/@name/*/@number值我需要:

<p:add-attribute match="/c:request" attribute-name="href"> 
    <p:with-option name="attribute-value" select="concat('http://localhost:8000/myRESTendpoint?uri=/mydb/', /*/@name, /*/@number,'.xml')"/> 
</p:add-attribute> 

回答

3

好吧,我能想出解決辦法。

貌似增加一個<p:add-attribute>步驟是正確的做法,這裏的問題是隻是在我的Xpath的錯誤...

<p:with-option name="attribute-value" select="concat('http://localhost:8000/myRESTendpoint?uri=/mydb/', /*/*/@name, /*/*/@number,'.xml')"/> 

由於PUT身體被包裹在一個元素,我需要去一個更低一級以達到我的XML文檔根元素(XSLT1輸出)所需的元數據,所以我的Xpath值需要更新爲/*/*/@name/*/*/@number

相關問題