XPath:如何引用元素的所有子元素而不使用*(星号)?
我目前正在从事一个Oracle SOA项目,在将传入消息映射到另一个消息时遇到问题。我是SOA和Oracle工具集的新手。我使用的是JDeveloper,以下是“关于”选项卡中列出的版本: “我的传入消息”是一条错误消息,用于包装来自其他服务的失败消息。该消息的格式如下:XPath:如何引用元素的所有子元素而不使用*(星号)?,xpath,oracle11g,jdeveloper,oracle-soa,Xpath,Oracle11g,Jdeveloper,Oracle Soa,我目前正在从事一个Oracle SOA项目,在将传入消息映射到另一个消息时遇到问题。我是SOA和Oracle工具集的新手。我使用的是JDeveloper,以下是“关于”选项卡中列出的版本: “我的传入消息”是一条错误消息,用于包装来自其他服务的失败消息。该消息的格式如下: <Error> <code /> <service /> ... <Message> [ORIGINAL MESSAGE HERE]
<Error>
<code />
<service />
...
<Message>
[ORIGINAL MESSAGE HERE]
</Message>
</Error>
这样做的问题是消息标记也会被复制,而我真正想要的只是它的内容。我尝试使用/error-v1:error/Message/*
,但JDeveloper生成一个错误,指出*
不是有效节点。如果我忽略错误并进行部署,则在映射发生时,流程会出错。我还尝试使用/error-v1:error/Message/child::*
,但这会产生相同的错误
我在网上找到的所有参考资料都说上述方法应该有效,但我似乎找不到一个同样适用于SOA的解决方案。建议?或许可以尝试
/error-v1:error/Message/text()
-您需要Message
标记的内部文本。尝试:
/error-v1:error/Message/node()我很想从这个问题中删除标记“XPath”,因为它似乎是关于某个特定产品所支持的XPath的一些非标准变体的问题。了解XPath并不能让您回答这个问题。我的想法是JDeveloper可能支持较旧的版本,但我还是将其包括在内,因为对话框专门提示输入XPath表达式。不幸的是,我从JDeveloper收到一个错误,指出
节点
不是有效的元素。我尝试了text()
,但两者似乎都不起作用。我可能需要找一位SOA专家,因为Oracle SOA可能正在使用非标准变体。不幸的是,这只会产生一个空字符串。如果删除/text()
,我会看到序列化的XML(
<Error>
<code />
<service />
...
<Message>
[ORIGINAL MESSAGE HERE]
</Message>
</Error>
/error-v1:Error/Message