2016-11-28 24 views
0

我有一個xml並需要提取消息的某些部分。當使用Jboss Developer studio 7.1默認xslt處理器時,命名空間被刪除,但它正在創建命名空間當使用在線工具和altova。 Junit測試因此失敗。 你能幫我嗎。XSLT轉換在Jboss Developer studio 7.1中表現不同,並且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> 

回答

0

由於您明確使用<xsl:element name="{local-name()}">在結果文件中構建元素,因此將它們放在沒有名稱空間中是正確的。如果您希望從輸入文檔保留名稱空間,請使用<xsl:copy>。如果您希望名稱空間urn:company:esb:services:RatingPricing:v01中的輸出與輸入無關,請將namespace="urn:company:esb:services:RatingPricing:v01"添加到xsl:element指令中。