为什么不<转换为<而>和其他转义字符转换适当

时间:2013-01-15 19:17:43

标签: xml xslt xpath soapui

我通过SoapUI发送soap请求并使用XSLT生成XML响应。我的回答需要看起来像这样:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
  <TXLifeResponse>         
     <TransType tc="1201">General Requirement Order Request</TransType>
  </TXLifeResponse>
 </soap:Body>
</soap:Envelope> 

我可以从以下XSLT

获得此回复
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:acord="http://ACORD.org/Standards/Life/2"  
     xmlns="http://ACORD.org/Standards/Life/2">
  <xsl:output method="xml" encoding="utf-8" indent="yes" />
  <xsl:variable name="TransType_tc" select="//acord:TXLife/acord:TXLifeRequest//acord:TransType/@tc" />
  <xsl:variable name="TransType" select="//acord:TXLife/acord:TXLifeRequest//acord:TransType" />

  <xsl:template match="/">       
         <TXLifeResponse>       
          <xsl:element name="TransType">
            <xsl:attribute name="tc"><xsl:value-of select="$TransType_tc"/></xsl:attribute>
            <xsl:value-of select="$TransType"/>
          </xsl:element>
        </TXLifeResponse>
  </xsl:template>
</xsl:stylesheet>

但我注意到了一个意想不到的行为。在使用<xsl:element<xsl:attribute>代码之前,我在XSLT中做了类似的事情:

&lt;TransType tc=&quot;<xsl:value-of select="$TransType_tc"/>&quot;&gt;<xsl:value-of select="$TransType"/> &lt;/TransType&gt;

SoapUI收到的输出是:

&lt;TransType tc="1201">General Requirement Order Request &lt;/TransType>

任何人都可以帮助我理解为什么&lt;未被转换但&gt;&quot;已经转换。

由于

1 个答案:

答案 0 :(得分:2)

查看syntax rules described in the XML specification

  

右尖括号(>)可以使用字符串&gt;表示,并且为了兼容性,必须使用&gt;或字符引用进行转义。内容中的字符串]]>,当该字符串未标记CDATA部分的结尾时。

所以,这是合法的:

<xml> > </xml>

......但不会出现这种情况:

<xml> ]]&gt; </xml>
  

要允许属性值包含单引号和双引号,撇号或单引号字符(')可以表示为&apos;,双引号字符({{1} })"

所以,这是合法的:

&quot;

......但不会出现这种情况:

<xml attr=" ' " />

某些转义编码器开发人员过于谨慎,或者更容易概括表示,因为您不需要太多了解转发数据的上下文。