我有这个xml文件
<Collections xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org">
<Collection value="bob">
<Environments>
<Environment>amazon</Environment>
</Environments>
<ContentTypes>
<Type>Standard:ShowVideo</Type>
<Type>Standard:VideoPlaylist</Type>
<Type>Blog</Type>
</ContentTypes>
</Collection>
<Collection value="sandy">
<Environments>
<Environment>amazon</Environment>
</Environments>
<ContentTypes>
<Type>Blog</Type>
</ContentTypes>
</Collection>
并在我的Mule流程中执行此xpath查询。它使用2个flowVars&#39;环境&#39;和&#39; contentType&#39;来自Redis的消息。
<set-variable variableName="collectionQuery" value="/Collections/Collection[Environments/Environment='#[environment]' and ContentTypes/Type='#[contentType]']/@value" />
<logger message="collectionQuery is #[collectionQuery]" level="INFO" />
<set-payload value="#[xpath(collectionQuery)]" />
<logger message="payload is #[payload]" level="INFO" />
在这里,您可以看到完全实例化的查询和结果。
INFO] org.mule.api.processor.LoggerMessageProcessor: collectionQuery is /Collections/Collection[Environments/Environment='amazon' and ContentTypes/Type='Blog']/@value
INFO] org.mule.api.processor.LoggerMessageProcessor: payload is [org.dom4j.tree.DefaultAttribute@140207e0 [Attribute: name value value "bob"], org.dom4j.tree.DefaultAttribute@11530d63 [Attribute: name value value "sandy"]]
结果看起来像是一个包含2个org.dom4j.tree对象的数组。我只需要一个属性&#39;值&#39;的ArrayList。比如这个
[鲍勃,沙质]
我可以在Groovy中执行此操作,但不使用Mule的xpath功能。
答案 0 :(得分:1)
只有这对我有用
<set-variable variableName="collectionName" value="#[payload.getText()]" doc:name="collectionName"/>
<logger message="now processing #[collectionName]" level="INFO" doc:name="Logger"/>
答案 1 :(得分:0)
我的xpath表达式返回了一个DefaultAttribute数组。要获取属性的实际值,作为String,我需要使用foreach循环调用getValue()方法。
<foreach doc:name="For Each">
<set-variable variableName="collectionName" value="#[payload.getValue()]" doc:name="collectionName"/>
<logger message="now processing #[collectionName]" level="INFO" doc:name="Logger"/>
</foreach>
输出:
INFO] org.mule.api.processor.LoggerMessageProcessor: now processing bob
INFO] org.mule.api.processor.LoggerMessageProcessor: now processing sandy