我正在尝试转换其中包含< >
的XML消息,并且我能够执行此操作。但转换后的&#34;数据类型&#34;没有人口稠密。
我的请求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">
<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>
我的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>
任何人都可以帮我纠正我的错误。提前致谢。干杯!!
答案 0 :(得分:4)
您没有处理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
。