System.Xml.XmlException: 名称不能以“;”字符(十六进制值 0x3B)开头

在xml文件中加入相关的代码后打包时提示 “System.Xml.XmlException: 名称不能以“;”字符(十六进制值 0x3B)开头。 第 254 行,位置 31。”

找到当前行后当前代码为:

for(int i=0;i<faces.length;++i)
{
}

其中出现了“<”,和xml中的语法冲突。应改为:

for(Face f:faces){
}

 

以上是2017年时候记录的文字
//////////////////////////////////////////////////////////////////////////
//     2020/7/23
//////////////////////////////////////////////////////////////////////////

首先原谅自己的无知,其他今天又遇上一样的问题,在思考、查找、改正后终于以正确的方式解决了此类问题,本想记录一下,打开日志后才发现之前竟然有此条记录,

上面的做法是取巧了,没有解决真正问题,而引起此问题的原因是在打包ue4的 *_APL.xml中出现的类似HashMap<String,String>,中的< > &等特殊符号,只要想明白

这点就基本上找到了解决的办法。现在去查下xml相关的文档:

在 XML 中,一些字符拥有特殊的意义。
如果您把字符 "<" 放在 XML 元素中,会发生错误,这是因为解析器会把它当作新元素的开始。

这样会产生 XML 错误:
<message>if salary < 1000 then</message>
为了避免这个错误,请用实体引用来代替 "<" 字符:
<message>if salary < 1000 then</message>

在 XML 中,有 5 个预定义的实体引用:
&lt; < less than
&gt; > greater than
&amp; & ampersand
&apos; ' apostrophe
&quot; " quotation mark

注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。    

所以只要把在*_APL.xml中不符合语法规定的字符用相关的实体替换了就行。

最后 HashMap<String,String> 转化为 HashMap&lt;String, String&gt;  && 转化为 &amp;&amp;

打包再看 BUILD SUCCESSFUL

 

posted @ 2017-03-14 10:30  sev  阅读(5864)  评论(0编辑  收藏  举报