我有一个xml,需要提取消息的某些部分。使用 Jboss Developer studio 7.1 默认 xslt 处理器时,命名空间被删除,但在使用在线工具和 altova 时创建命名空间。 因此,Junit 测试失败。 你能帮帮我吗?
输入:
<response>
<esb-metadata>
<user-id>Cube</user-id>
<service-name>Pricing</service-name>
<source-system-id>Cube001</source-system-id>
<source-transaction-id>1234567</source-transaction-id>
<environment>DEV</environment>
<message-type>RES</message-type>
<result>DONE</result>
<correlation-id>123456789</correlation-id>
</esb-metadata>
<message-body>
<rating-pricing-response xmlns="urn:company:esb:services:RatingPricing:v01">
<account_final_rp_rate>10</account_final_rp_rate>
<account_final_bpp_rate>5</account_final_bpp_rate>
<account_final_te_rate>15</account_final_te_rate>
<group1_base_rate>9</group1_base_rate>
<group2_base_rate>7</group2_base_rate>
<state_group1_factor>5</state_group1_factor>
<csp_group1_table_value>45</csp_group1_table_value>
<loc_age_factor>10</loc_age_factor>
<loc_sprinkler_group1>15</loc_sprinkler_group1>
<loc_ded_factor>145</loc_ded_factor>
<loc_fire_calibration>654</loc_fire_calibration>
<loc_Modelled_cat_factor>44</loc_Modelled_cat_factor>
<account_final_benchmark_rate>6</account_final_benchmark_rate>
</rating-pricing-response>
</message-body>
</response>
XSLT:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="urn:company:esb:services:RatingPricing:v01">
<xsl:output indent="yes" method="xml" encoding="utf-8"
omit-xml-declaration="yes" />
<!-- template to copy elements -->
<xsl:template match="/">
<xsl:for-each select="//message-body">
<xsl:apply-templates select="@* | node()" />
</xsl:for-each>
</xsl:template>
<!-- template to copy elements -->
<xsl:template match="*">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@* | node()" />
</xsl:element>
</xsl:template>
<!-- template to copy attributes -->
<xsl:template match="@*">
<xsl:attribute name="{local-name()}"><xsl:value-of select="." /></xsl:attribute>
</xsl:template>
<!-- template to copy the rest of the nodes -->
<xsl:template match="comment() | text() | processing-instruction()">
<xsl:copy />
</xsl:template>
</xsl:stylesheet>
预期输出:
<rating-pricing-response xmlns="urn:company:esb:services:RatingPricing:v01">
<account_final_rp_rate>10</account_final_rp_rate>
<account_final_bpp_rate>5</account_final_bpp_rate>
<account_final_te_rate>15</account_final_te_rate>
<group1_base_rate>9</group1_base_rate>
<group2_base_rate>7</group2_base_rate>
<state_group1_factor>5</state_group1_factor>
<csp_group1_table_value>45</csp_group1_table_value>
<loc_age_factor>10</loc_age_factor>
<loc_sprinkler_group1>15</loc_sprinkler_group1>
<loc_ded_factor>145</loc_ded_factor>
<loc_fire_calibration>654</loc_fire_calibration>
<loc_Modelled_cat_factor>44</loc_Modelled_cat_factor>
<account_final_benchmark_rate>6</account_final_benchmark_rate>
</rating-pricing-response>
实际输出:
<rating-pricing-response>
<account_final_rp_rate>10</account_final_rp_rate>
<account_final_bpp_rate>5</account_final_bpp_rate>
<account_final_te_rate>15</account_final_te_rate>
<group1_base_rate>9</group1_base_rate>
<group2_base_rate>7</group2_base_rate>
<state_group1_factor>5</state_group1_factor>
<csp_group1_table_value>45</csp_group1_table_value>
<loc_age_factor>10</loc_age_factor>
<loc_sprinkler_group1>15</loc_sprinkler_group1>
<loc_ded_factor>145</loc_ded_factor>
<loc_fire_calibration>654</loc_fire_calibration>
<loc_Modelled_cat_factor>44</loc_Modelled_cat_factor>
<account_final_benchmark_rate>6</account_final_benchmark_rate>
</rating-pricing-response>
由于您显式使用<xsl:element name="{local-name()}">
在结果文件中构造元素,因此将它们放在任何命名空间中都是正确的。如果要保留输入文档中的命名空间,请使用<xsl:copy>
。如果希望输出在命名空间urn:company:esb:services:RatingPricing:v01
而不考虑输入,请将namespace="urn:company:esb:services:RatingPricing:v01"
添加到xsl:element
指令中。