如何将特殊字符原样写入 XML 文件

Posted

技术标签:

【中文标题】如何将特殊字符原样写入 XML 文件【英文标题】:How to write special characters as they are to XML file 【发布时间】:2017-05-17 09:53:13 【问题描述】:

我正在尝试使用 vbscript/QTP 根据 excel 中提供的数据创建文件。我遇到的问题是带有特殊字符的负面测试用例。我想将特殊字符写为节点文本,但它们会自动转换为转义字符。

要写入的文本:地址第一行是"'&amp 等于 3 保存文件后的实际文本:地址第一行是<>>>&&amp;amp;amp;amp;amp;amp;amp;amp;lt;>>>>&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp-and-amp-and-of-saving the file

有没有办法告诉 vbscript/XMLDOM 不要转换这些。

我使用的代码很简单。

Set  NodeList = uxtXMLDoc.documentElement.selectSingleNode(strNodePath)

If  Not(NodeList is Nothing) Then                                       
    NodeList.childNodes(0).nodeValue = "address line one is&lt;&gt;&quot;&apos;&amp equal to 3"
End If

【问题讨论】:

要写入的文本字段已经转换了特殊字符。 :)但是您可以在代码部分中找到要编写的实际文本。 是在 xml 中定义属性的内容,如果不对其进行转义,则不能将它们用作值,因此它将被视为属性。当您阅读 XML 时,您应该以您期望的格式获得文本。 (没有转义字符)..你有什么问题? 我只尝试输入转义字符。请参考我的代码。我面临的问题是每个&符号都被转换为'&'因此,像'>'这样的字符并且在读取此 XML 的结果 MQ 消息中未按预期出现。 【参考方案1】:

在 'If' 条件中使用以下行:

NodeList.childNodes(0).nodeValue = "address line one is"&Chr(60)&Chr(62)&Chr(34)&chr(39)&"&amp equal to 3"

这里,

  chr(60) means <
  chr(62) means >
  chr(34) means "
  chr(39) means '

结果如下:

【讨论】:

不完全是我遇到的问题。我遇到的问题是....即使我尝试添加 (<) 或 (>) 转义字符,vbscript 也会将其更改为 (&lt) 或 (&gt) 因此我的 xml 变得不正确人物。 If Not(NodeList is Nothing) Then NodeList.childNodes(0).nodeValue = "address line one is<>"'&amp equal to 3" End If Resultant xml address line one is&lt ;>&quot;&’&amp 等于 3【参考方案2】:

通过使用@Kira 的解决方案和下面链接中发布的解决方案,我能够创建我的解决方案。问题是 XML 从头到尾线性替换。

Hence first ampersand in ("&lt;") will be replaced as ("&amp;lt") instead of (<). 

您必须在 XML 替换字符之前主动替换字符。

strReplaceText = Replace(strtext, "&lt;", chr(60)) //Sample... Repeat for all the chars
NodeList.childNodes(0).nodeValue = strReplaceText 
objXML.Save(destination)

有关更多信息,请访问此主题。 vbscript create-convert xml with special characters

【讨论】:

以上是关于如何将特殊字符原样写入 XML 文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 使用特殊字符写入 XML 文档

xml特殊字符处理

如何使用 fast-csv 将特殊字符写入节点中的 csv 文件

如何使用 mfc 应用程序在文件中写入特殊字符?

如何防止写入特殊字符[重复]

如何忽略Lua中字符串操作的特殊字符?