1

我有一个在输入上运行 XSLT 的管道,然后通过一个<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>步骤中看到的,我正在尝试构建一个字符串并使用该<p:xslt>步骤的输出 XML 中的属性值构造它,并将其输入到我<c:request>的步骤的 href 选项中。

我尝试在<p:attribute match>之前添加一个更改 href 属性的步骤,<p:http-request>但它没有获取我需要的/*/@nameand/*/@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>
4

1 回答 1

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

于 2015-04-22T16:39:43.433 回答