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 个预定义的实体引用:
< | < | less than |
> | > | greater than |
& | & | ampersand |
' | ' | apostrophe |
" | " | quotation mark |
注释:在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯。
所以只要把在*_APL.xml中不符合语法规定的字符用相关的实体替换了就行。
最后 HashMap<String,String> 转化为 HashMap<String, String> && 转化为 &&
打包再看 BUILD SUCCESSFUL