2015-11-19 47 views
1

我試圖轉換其中有&lt; &gt;的XML消息,並且我能夠做到這一點。但是在轉換之後,「數據類型」沒有被填充。隱藏其中包含< >的XML使用XSLT

我的請求XML:

<?xml version="1.0"?> 
<params> 
    <param dataType="java.lang.String">respID</param> 
    <param dataType="java.lang.Date">2015-11-04</param> 
    <param dataType="java.lang.String"> 

    &lt;XX_IL_OLM_COMP_ELEMENT_OBJ&gt;&lt;P_OLM_COMP_ELEMENT&gt; 
&lt;XX_IL_OLM_COMP_ELEMENT_OBJ&gt; 
    &lt;P_ACTION&gt;CREATE&lt;/P_ACTION&gt; 
    &lt;p_activity_version_id&gt;12&lt;/p_activity_version_id&gt; 
    &lt;p_learning_path_id&gt;12&lt;/p_learning_path_id&gt; 
    &lt;p_certification_id&gt;1006&lt;/p_certification_id&gt; 
    &lt;p_offering_id&gt;3&lt;/p_offering_id&gt; 
    &lt;p_competence_id&gt;43&lt;/p_competence_id&gt; 
    &lt;p_proficiency_level_id&gt;34&lt;/p_proficiency_level_id&gt; 
    &lt;p_competence_element_id&gt;64&lt;/p_competence_element_id&gt; 
    &lt;p_object_version_number&gt;09&lt;/p_object_version_number&gt; 
    &lt;P_ERROR_CODE&gt;43&lt;/P_ERROR_CODE&gt; 
    &lt;P_ERROR_MESSAGE/&gt; 
&lt;/XX_IL_OLM_COMP_ELEMENT_OBJ&gt; 
&lt;/P_OLM_COMP_ELEMENT&gt; 
&lt;/XX_IL_OLM_COMP_ELEMENT_OBJ&gt; 

    </param> 
    <param dataType="java.lang.String">respID</param> 
</params> 

我的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="@*|node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="param"> 
    <xsl:copy> 
     <xsl:value-of select="." disable-output-escaping="yes"/> 
    </xsl:copy> 
</xsl:template> 

</xsl:stylesheet> 

輸出:

<?xml version="1.0" encoding="UTF-8"?> 
<params> 
    <param>respID</param> 
    <param>2015-11-04</param> 
    <param> 

    <XX_IL_OLM_COMP_ELEMENT_OBJ><P_OLM_COMP_ELEMENT> 
<XX_IL_OLM_COMP_ELEMENT_OBJ> 
    <P_ACTION>CREATE</P_ACTION> 
    <p_activity_version_id>12</p_activity_version_id> 
    <p_learning_path_id>12</p_learning_path_id> 
    <p_certification_id>1006</p_certification_id> 
    <p_offering_id>3</p_offering_id> 
    <p_competence_id>43</p_competence_id> 
    <p_proficiency_level_id>34</p_proficiency_level_id> 
    <p_competence_element_id>64</p_competence_element_id> 
    <p_object_version_number>09</p_object_version_number> 
    <P_ERROR_CODE>43</P_ERROR_CODE> 
    <P_ERROR_MESSAGE/> 
</XX_IL_OLM_COMP_ELEMENT_OBJ> 
</P_OLM_COMP_ELEMENT> 
</XX_IL_OLM_COMP_ELEMENT_OBJ> 

    </param> 
    <param>respID</param> 
</params> 

所需的輸出應該有它的數據類型爲屬性。

<?xml version="1.0" encoding="UTF-8"?> 
<params> 
    <param dataType="java.lang.String">respID</param> 
    <param dataType="java.lang.Date">2015-11-04</param> 
    <param dataType="java.lang.String"> 

    <XX_IL_OLM_COMP_ELEMENT_OBJ><P_OLM_COMP_ELEMENT> 
<XX_IL_OLM_COMP_ELEMENT_OBJ> 
    <P_ACTION>CREATE</P_ACTION> 
    <p_activity_version_id>12</p_activity_version_id> 
    <p_learning_path_id>12</p_learning_path_id> 
    <p_certification_id>1006</p_certification_id> 
    <p_offering_id>3</p_offering_id> 
    <p_competence_id>43</p_competence_id> 
    <p_proficiency_level_id>34</p_proficiency_level_id> 
    <p_competence_element_id>64</p_competence_element_id> 
    <p_object_version_number>09</p_object_version_number> 
    <P_ERROR_CODE>43</P_ERROR_CODE> 
    <P_ERROR_MESSAGE/> 
</XX_IL_OLM_COMP_ELEMENT_OBJ> 
</P_OLM_COMP_ELEMENT> 
</XX_IL_OLM_COMP_ELEMENT_OBJ> 

    </param> 
    <param dataType="java.lang.String">respID</param> 
</params> 

任何人都可以幫助我糾正我的錯誤。提前致謝。乾杯!!

回答

3

您尚未處理您的param模板中的屬性。無論是添加<xsl:copy-of select="@*"/><xsl:apply-templates select="@*"/>到模板...

<xsl:template match="param"> 
    <xsl:copy> 
     <xsl:apply-templates select="@*"/> 
     <xsl:value-of select="." disable-output-escaping="yes"/> 
    </xsl:copy> 
</xsl:template> 

我會用xsl:apply-templates。這樣,如果您將來需要更改這些屬性,則只需添加一個模板即可。如果您使用xsl:copy-of,則必須添加模板並將xsl:copy-of更改爲xsl:apply-templates

+0

它的作品DanielHaley&@kjhughes – Sammy

相關問題