【发布时间】:2017-06-02 13:09:45
【问题描述】:
我需要将 XML 中的 PCDATA 转换为另一个 XML。谁能帮我解决这个问题?
我需要将请求中的业务线、站点位置和政策编号映射到相应的字段以作为响应。
包含 PCDATA 的输入 XML 是转义的 XML:
<ns2:Response xmlns:ns2="http://webservices.company.com/">
<return><ibdoc><result lob='15' env_def='SR_JBOSS_DEV' gen_date='2017-01-18 12:11:30 AM' ibdoc_version='3.1' engine_type='JBoss' site_location='S396AT092'>
<program parent_id='1001' program_id='1' program_ver='1' package_date='2017-01-05T13:06:01' status='PASS' gen_type='0' region_format='en-US' from_cache='true'>
<c i='0' d='Policy'>
<m i='POLICY NUMBER' d='POLICY NUMBER' v='1000001'/>
</c>
</program>
<stats>
<start_time>2017-01-18 12:11:30:0191 AM</start_time>
<stop_time>2017-01-18 12:11:30:0226 AM</stop_time>
<running_time>35</running_time>
<xml_walking>31</xml_walking>
</stats>
</result></ibdoc></return>
</ns2:Response>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<ns2:custom-response xmlns:ns2="http://esbservices.company.com/">
</ns2:custom-response>
</xsl:template>
</xsl:stylesheet>
预期输出 XML:
<ns2:custom-response xmlns:ns2="http://esbservices.company.com/">
<line-of-business>15</line-of-business>
<site>S396AT092</site>
<policy>
<policy-nr>1000001</policy-nr>
</policy>
</ns2:custom-response>
【问题讨论】:
-
哪个 CDATA 部分?您的输入 XML 中没有
-
嗨 Thomas,返回标签内的内容是 CDATA 部分 正在转换为 <和>分别。我知道根据链接soapui.org/functional-testing/working-with-cdata.html,它是有效的cdata部分
-
恕我直言,那是 PCDATA,因为 P 代表 parsed。必须解析该文本以替换实体。见stackoverflow.com/a/11624583/480982
-
好的,你现在得到了我的支持。像这样,问题似乎完成了。
-
您可以使用哪种 XSLT 处理器? Saxon 9 或 Altova 的最新版本支持 XPath 3.0 函数
parse-xmlw3.org/TR/xpath-functions-30/#func-parse-xml,它允许您将带有 XML 的字符串解析为文档,然后您可以像往常一样编写模板来转换它。