disable-output-escaping = yes在以下情况下不起作用

时间:2015-10-05 07:25:15

标签: xml xslt attributes

我有以下示例xml`

<?xml version="1.0" encoding="utf-8"?>
<TDX>
<AddressData>
    <AddressDetail>
<Address FieldName="ReceiverAddress1" FieldValue="CNR TOORONG &amp; TOORAK RD"/>
    </AddressDetail>    
</AddressData>
</TDX>  

将Xml转换为所需格式的XSLT。我在这里采取了一个节点

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>
  <xsl:template match="/">
    <ConNotes>
      <ConNote>
        <ReceiverAddress1>
          <xsl:value-of  disable-output-escaping="yes" select="TDX/AddressData/AddressDetail/Address[@FieldName='ReceiverAddress1']/@FieldValue"/>
        </ReceiverAddress1>
      </ConNote>
    </ConNotes>
  </xsl:template>
</xsl:stylesheet>

每当我尝试使用xslt转换XML时,我都会收到错误“此位置不允许空格”。我已经弄清楚这个错误是由于特殊字符&amp;存在于地址节点的FieldValue属性中 我已经尝试过disable-output-escpaing =“yes”但它没有按预期工作 我在XSLT文件中使用了“output method =”xml“” 请帮我解决一下这个。我正在使用XML记事本来应用转换。 我期待输出xml像这样:

<?xml version="1.0" encoding="utf-8" ?> 
- <ConNotes>
- <ConNote>
  <ReceiverAddress1>CNR TOORONG & TOORAK RD</ReceiverAddress1> 
  </ConNote>
  </ConNotes>

1 个答案:

答案 0 :(得分:1)

当您使用disable-output-escaping="yes"时,输出中的&符号&不会转换为实体&amp;。然后输出不是格式良好的XML文档。当您在IE中打开结果XML时,您将收到“Whitespace ...”错误。

修复很简单:只需删除disable-output-escaping="yes"和 输出结构良好:

<ConNotes>
<ConNote>
<ReceiverAddress1>CNR TOORONG &amp; TOORAK RD</ReceiverAddress1> 
</ConNote>
</ConNotes>