我有一个在输入上运行XSLT的管道,然后通过<p:http-request>
步骤将该结果的PUT输入到数据库中。
这里的棘手问题是我需要使用<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>
步骤中看到的那样,我正在尝试构建一个字符串,并使用<p:xslt>
步骤的输出XML中的属性值构建它,并将其提供给我的{{1步骤的href选项。
我尝试添加<c:request>
步骤以在<p:attribute match>
之前更改href属性,但它没有获取我需要的<p:http-request>
和/*/@name
值:< / p>
/*/@number
答案 0 :(得分: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值需要更新为{ {1}}和/*/*/@name
。