【问题标题】:XML not getting generated properly due to special character由于特殊字符,XML 无法正确生成
【发布时间】:2016-12-02 19:22:37
【问题描述】:

现在我有一个 XML,它基本上是所有站点和子站点的名称。 XML 格式是这样的:

<?xml version="1.0" encoding="ISO-8859-1"?>
    <Sites xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.fakeurl.com">
        <site SId="00600095e-8450-0002-0000-847002f99he" WebId="xyz767-8450-0002-0000-847002f99heb" 
         Url="http://a122.xyz.com" Own="" RecOwn="" Nm="ABC" Desc="ABC" Org="" Pr="" SC="" St="Blank Site" 
         Sr="" CDb="XXCO_PP_ABC_Content_01" ACId="" />
    </Sites>

现在网站的标题之一有字符“VT”。我无法粘贴它,因为它没有使用符号(见下面的屏幕截图)。它在记事本++中复制时显示为VT,并且在记事本上显示为带圆圈的箭头符号。在浏览器上,如果我尝试复制它会给出一个空白空间。我将附上符号的屏幕截图,就像它在记事本中的显示方式一样。

问题是由于这个字符而导致的 XML 中断。我已经用正确的编码处理了所有可能的特殊字符,但是这个符号我无法在我的代码中替换,因为我无法在 Visual Studio 中复制和粘贴。它只出现在记事本和记事本++中。关于如何处理这个字符的任何想法??

【问题讨论】:

  • 尝试像&lt;?xml version="1.0" encoding="utf-8"?&gt;这样将编码属性值替换为utf-8
  • 这没有帮助...最初是utf-8,我改成ISO来处理其他字符
  • 如果您的输入包含垂直制表符,那么它不是 XML(至少不是 XML 1.0)并且不能被 XSLT 处理。在处理文档之前,使用其他工具替换它(或至少将 XML 声明更改为 `version="1.1")。
  • 如果我更改为 1.1 浏览器会说 xml 版本在 chrome 中不受支持

标签: xml xslt


【解决方案1】:

如果它是垂直制表符 (x0B),那么它在 XML 1.0 中不是合法字符。你将不得不做出决定,是尝试以某种方式表达它,还是放弃它或替代它。表示此类字符的一种方法是处理指令&lt;?x 0B?&gt;,但这仅适用于文本节点,不适用于属性。

切换到 utf-8 对这个特殊字符没有帮助,但如果您无法控制输入中的字符库,这可能是一个好主意。

【讨论】:

  • 即使我尝试替换它,我该怎么做。 XML 是动态生成的,如果我尝试替换一个字符,我应该把它放在我的方法中,在这里我无法在我的 Visual Studio 窗口中复制这个字符。它只会被复制到记事本和记事本中 ++
  • 如果声称生成 XML 的东西正在生成不正确的 XML,那么您可以像管理任何其他有错误(或任何其他有缺陷的产品)的程序一样管理它:您修复它,或者您切换到不同的供应商,或者你通过修改错误程序的输入或输出来解决它。
【解决方案2】:

如果没有实际代码,它看起来可能是垂直制表符正则表达式? http://docs.notepad-plus-plus.org/index.php/Regular_Expressions

使用 HEX ASCII Notepad ++ Convert 插件查找字符

VT的十六进制值为0x0b 十进制值为 11

一旦你知道字符使用 XSLT 替换功能。

How should the '\t' character be handled within XML attribute values?

【讨论】:

  • Michael 建议与生成 xml 的公司一起输入支持票证。您可以通过 Michael 对 'How should the '\t' ... link 的回答来解决这个问题,并将 Michael 正确答案中使用的 \t 替换为 \v 用于垂直制表符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 2015-05-23
  • 2013-06-06
  • 2016-12-21
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多