我需要执行以下映射。我们收到一个(简单的)格式良好的 XML 文件。在该 xml 文件中可以有特殊字符 - 已编码。例如 &
映射的输出需要如下所示:
<ns0:SupplierTransaction xmlns:ns0="http://MH.Schemas/SQL/MDM/Supplier">
<ns0:CIC.ImportSupplier_Spain>
<ns0:data><Suppliers xmlns=""><Supplier><IDCONO>All Freez &lt; &amp; &gt; (Verp)IZ Oude Bunders</IDCONO></Supplier></Suppliers></ns0:data>
</ns0:CIC.ImportSupplier_Spain>
</ns0:SupplierTransaction>
如您所见,我需要对收到的 xml 进行编码并将其包装在一些节点上。问题是对于特殊字符(&、<、>),它们需要被编码两次。因为如果您将 ns0:data 字段解析回 XML,那么它也会解析“&” 返回 "&" 导致无效的 XML。它应该将其解析为 & ==> 所以这就是为什么它应该被编码两次。
我的问题是,我怎样才能在 xsl 中做到这一点?所以我需要检测特殊符号:
"&" and encode it twice: &amp;
"<" and encode it twice: &lt;
">" and encode it twice: &gt;
仅供参考,我正在将此消息传输到 SQL 过程。SQL 过程的输入参数称为“数据”,数据类型为“XML”。因此,SQL 将数据元素内的所有内容解析为 XML,如果我不对特殊字符进行双重编码,它会在特殊字符处引发错误。例如:
<ns0:data><Node>This is some text & chars</Node></ns0:data>
所以解析如下:
<Node>This is some tekst & chars</Node> ==> Invalid XML
它应该是以下内容:
<ns0:data><Node>This is some text &amp; chars</Node></ns0:data>
解析如下:
<Node>This is some tekst & chars</Node> ==> Valid XML