我一直在尝试使用XSLT从以下xml文件中获取元素“测试”的内容,但我真的被阻止了。
您知道如何使用XSLT获取它吗
XML文件内容如下所示:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<BusinessResponse>
<BusinessResult><![CDATA[<?xml version="1.0" encoding="UTF-8"?><test>helloWorld</test>]]></BusinessResult>
</BusinessResponse>
</soap:Body>
</soap:Envelope>
试着这样做:
<xsl:value-of select="BusinessResult" disable-output-escaping="yes"/>
使用XSLT 3.0,您可以使用parse-xml()
函数将文本解析为xml,然后可以通过XPath将其转换到结构中,以获得
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:sequence select="parse-xml(/soap:Envelope/soap:Body/BusinessResponse/BusinessResult)/test"/>
</xsl:template>
</xsl:stylesheet>
使用XSLT 1.0或更高版本,如果您的内容真的那么简单,并且只希望文本节点位于
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:value-of
select="substring-before(
substring-after(/soap:Envelope/soap:Body/BusinessResponse/BusinessResult,
'<test>'),
'</test>')" />
</xsl:template>
</xsl:stylesheet>
如果您需要能够执行更复杂的操作,并且需要XSLT和XPath的全部功能,那么您可以通过两种转换来实现这一点。通过使用
xsl:value of
和disable output escaping=“yes”
,将BusinessResult
的text()序列化为XML的第一个转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<xsl:output omit-xml-declaration="yes" indent="yes" />
<xsl:template match="/">
<xsl:value-of select="/soap:Envelope/soap:Body/BusinessResponse/BusinessResult" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
它产生:
<?xml version="1.0" encoding="UTF-8"?><test>helloWorld</test>
如果您希望在处理SOAP信封时将其与其他XML结构一起使用,则可能需要排除XML声明:
substring-after(/soap:Envelope/soap:Body/BusinessResponse/BusinessResult,'?>')
然后使用第二个XSLT从XML输出中选择和处理您想要的内容
主要内容:映射拦截动作,参考Struts 2的开发者用来声明行为属于一个包,扩展 “struts-default“, 其中包含默认设置的拦截。 拦截器的默认设置进行分组为“defaultStack”在struts-default.xml文件中,它位于 struts2-core.jar 文件,“defaultStack”提供所有的核心Struts2功能,这是最适合应用的需要。 试着学习struts-default.xml文件,
easyopen在1.3.1版本开始支持拦截器。 easyopen拦截器实现原理跟springmvc拦截器类似,拦截器作用在api方法上,即有@Api注解的方法。 拦截器定义如下: /** * 拦截器,原理同springmvc拦截器 * @author tanghc * */ public interface ApiInterceptor { /** * 预处理回调方法,
你可以配置处理器拦截器HandlerInterceptors或web请求拦截器WebRequestInterceptors等拦截器,并配置它们拦截所有进入容器的请求,或限定到符合特定模式的URL路径。 在MVC Java编程配置下注册拦截器的方法: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigure
Uragano里可以自定义拦截器,并且拦截器分服务器端拦截器和客户端拦截器 拦截器还分全局拦截器和局部拦截器,并且拦截器也是支持依赖注入的 创建拦截器 public class ClientGlobalInterceptor : InterceptorAbstract { private ILogger Logger { get; } public
问题内容: 我有一个流程,在CXF客户端上我安装了拦截器,提供程序和异常映射程序。就我而言,我正在通过拦截器捕获来自客户端的不良响应,然后我想中止cxf总线链并引发故障。不幸的是我做不到,因为在每种情况下都只记录从拦截器抛出的异常,但是主要错误(错误的json格式)会传播到异常映射器。我想避免使用异常映射器,但是我不知道怎么做。我正在使用WebClient来实现这样的拦截器: 我读到我应该实现ja
问题内容: 我正在使用Java EE 6和Jboss AS7.1,并尝试使用拦截器绑定(来自jboss网站的示例)。 我有一个InterceptorBinding注解: 拦截器: 还有一个豆: 但是拦截器没有被称为。。。 在编写此代码时将调用拦截器: 谢谢你的帮助。 问题答案: 您是否按照参考示例中的说明启用了拦截器? 缺省情况下,bean档案没有通过拦截器绑定绑定的已启用拦截器。必须通过将侦听器