You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止XSLT转换过程中HTML标签被剥离?

解决XSLT提取内容时丢失HTML标签的问题

你的XSLT代码里,用<xsl:value-of>提取job_intro、location_description等节点内容时,会自动剥离里面的HTML标签(比如<h3>、<p>),只留纯文本,导致招聘帖格式混乱。问题出在这段代码:

<member>
  <name>description</name>
  <value>
    <xsl:value-of select="job_intro" />
    <xsl:value-of select="location_description" />
    <xsl:value-of select="job_description" />
    <xsl:value-of select="brand_desc" />
  </value>
</member>

解决方法

<xsl:value-of>的作用是提取节点的纯文本内容,要保留节点内的所有子元素(包括HTML标签),得换成<xsl:copy-of>——它会完整复制指定节点的所有内容,包括子节点、属性和文本。

修改后的代码段如下:

<member>
  <name>description</name>
  <value>
    <xsl:copy-of select="job_intro/node()" />
    <xsl:copy-of select="location_description/node()" />
    <xsl:copy-of select="job_description/node()" />
    <xsl:copy-of select="brand_desc/node()" />
  </value>
</member>

完整修改后的XSLT代码

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">

    <xsl:param name="transaction"/>
    <xsl:param name="adtype"/>
    <xsl:param name="testmode"/>
    <xsl:param name="username"/>
    <xsl:param name="password"/>

    <xsl:variable name="apos" select='"&amp;apos;"'/>

    <xsl:output method = "xml" omit-xml-declaration="no" encoding="iso-8859-1" indent="yes"/>
    <xsl:template match="pb_ad">
        <xsl:if test="$transaction!='DELETE'">
            <methodCall>
                <methodName>submitJob</methodName>
                <params>
                    <param><value><struct>
                                <member><name>source</name><value><i4>76</i4></value></member>
                                <member>
                                    <name>username</name>
                                    <value>
                                        <string>
                                            <xsl:choose>
                                                
                                            </xsl:choose>


                                        </string>
                                    </value>
                                </member>
                                <member>
                                    <name>password</name>
                                    <value>
                                        <string>
                                            <xsl:choose>
                                                
                                            </xsl:choose>
                                        </string>
                                    </value>
                                </member>

                                <member><name>reference</name><value><i4><xsl:value-of select="@id" /></i4></value></member>
                                <member><name>title</name><value><string><xsl:value-of select="headline"/></string></value></member>
                                

                        
                                <member><name>industry</name><value><i4>27</i4></value></member>
                                <member><name>type</name><value><string>
                                            <xsl:choose>
                                                <xsl:when test="employment_term_id=2">contract</xsl:when>
                                                <xsl:when test="employment_term_id=5">temporary</xsl:when>
                                                <xsl:when test="employment_term_id=6">part_time</xsl:when>
                                                <xsl:otherwise>permanent</xsl:otherwise>
                                            </xsl:choose>
                                        </string></value></member>
                                <member><name>salary_min</name><value><i4><xsl:value-of select="salaryfrom"/></i4></value></member>
                                <member><name>salary_max</name><value><i4><xsl:value-of select="salaryto"/></i4></value></member>
                                <member><name>salary_period</name><value><i4>
                                            <xsl:choose>
                                                <xsl:when test="pay_period_id=2">405</xsl:when>
                                                <xsl:when test="pay_period_id=3">406</xsl:when>
                                                <xsl:when test="pay_period_id=4">407</xsl:when>
                                                <xsl:when test="pay_period_id=5">404</xsl:when>
                                                <xsl:otherwise>403</xsl:otherwise>
                                            </xsl:choose>
                                        </i4></value></member>
                                <member><name>salary_info</name><value><string><xsl:value-of select="job_salary"/></string></value></member>
                                <member><name>region</name><value><i4><xsl:value-of select="locations_mapped/location"/></i4></value></member>
                                <member><name>display_location</name><value><string><xsl:value-of select="hotel"/></string></value></member>
                                <member><name>precise_location</name><value><string><xsl:value-of select="postcode"/></string></value></member>
                                <member><name>description</name><value>
                                    <xsl:copy-of select="job_intro/node()" />
                                    <xsl:copy-of select="location_description/node()" />
                                    <xsl:copy-of select="job_description/node()" />
                                    <xsl:copy-of select="brand_desc/node()" />
                                </value></member>

                                <xsl:if test="apply_online_url!=''">
                                    <member><name>external_url</name><value><string><xsl:value-of select="apply_online_url"/></string></value></member>
                                    <member><name>contact_name</name><value><string><xsl:value-of select="contact_first_name"/><xsl:text> </xsl:text><xsl:value-of select="contact_last_name"/></string></value></member>
                                    <member><name>contact_telephone</name><value><string></string></value></member>
                                    <member><name>contact_email</name><value><string></string></value></member>
                                </xsl:if>

                                <xsl:if test="apply_online_url=''">
                                    <member><name>contact_name</name><value><string><xsl:value-of select="contact_first_name"/><xsl:text> </xsl:text><xsl:value-of select="contact_last_name"/></string></value></member>
                                    <member><name>contact_telephone</name><value><string><xsl:value-of select="contact_work_phone"/></string></value></member>
                                    <member><name>contact_email</name><value><string><xsl:value-of select="email"/></string></value></member>
                                </xsl:if>

                                <member><name>direct_apply_url</name><value><string></string></value></member>
                                <member><name>direct_apply_jobid</name><value><string><xsl:value-of select="@id"/></string></value></member>
                                <member><name>all_industries</name><value><i4>0</i4></value></member>
                            </struct></value>
                    </param>
                </params>
            </methodCall>
        </xsl:if>
    </xsl:template>

</xsl:stylesheet>

补充说明

  • <xsl:copy-of select="节点名/node()"/>会复制该节点下的所有子元素和文本,完美保留原有的HTML格式。
  • 如果你的源XML中,job_intro等节点本身包含HTML标签作为子节点,用这个方法就能解决格式丢失的问题。

内容的提问来源于stack exchange,提问作者user794846

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 04:36:25