Java 转义双引号工作不正常
我正在用Java编写一个解析器,用XML dom编写一个字符串 这是我的密码Java 转义双引号工作不正常,java,unicode,character-encoding,xml-parsing,escaping,Java,Unicode,Character Encoding,Xml Parsing,Escaping,我正在用Java编写一个解析器,用XML dom编写一个字符串 这是我的密码 String val="\""+val+"\""; String temp=StringEscapeUtils.escapeXml(val); node.setTextContent(temp); 然后我使用LSSerializer DOMImplementationLS domImplementation = (DOMImplementationLS)doc.getImplementation(); LSSeria
String val="\""+val+"\"";
String temp=StringEscapeUtils.escapeXml(val);
node.setTextContent(temp);
然后我使用LSSerializer
DOMImplementationLS domImplementation = (DOMImplementationLS)doc.getImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
String tempString=lsSerializer.writeToString(doc);
并保存到文件中
现在我的问题是字符串“test”应该是;测试“但它将以的形式出现&;引用;测试及测试;引用强>
似乎&是单独转义的。谁能告诉我代码中有什么错误吗???您的字符串被转义了两次
“test”
->“test”
(“
转义为”
)“测试”
->&;引用;测试及测试;引用代码>(&
转义为&;
)
node.setTextContent(temp);
已经逃走了,但是这不是真的
:
…类似地,在设置时,也不执行解析,输入字符串被视为纯文本内容
但是,是否:
在文档的字符数据中(标记之外),任何不能直接表示的字符都将替换为字符引用。“”的出现次数)
因此,无论哪种情况,都不需要使用StringEscapeUtils.escapeXml(val)进行两次转义代码>,您可以省略该行,从而导致:
String val="\""+val+"\"";
node.setTextContent(val);
或者更简单:
node.setTextContent("\""+val+"\"");
或者可能对我更好一点(我不喜欢串接字符串):
但是,我不明白为什么要转义“
,因为(在文本节点中)不会破坏XML格式….您的字符串会转义两次
“test”
->“test”
(“
转义为”
)
“test”
->“test”
(和转义为
)
我被骗相信这句话
node.setTextContent(temp);
已经逃走了,但是这不是真的
:
…类似地,在设置时,也不执行解析,输入字符串被视为纯文本内容
但是,是否:
在文档的字符数据中(标记之外),无法直接表示的任何字符都将替换为字符引用。出现“”)
因此,无论哪种情况,都不需要使用StringEscapeUtils.escapeXml(val);
进行两次转义,您可以省去该行,从而产生:
String val="\""+val+"\"";
node.setTextContent(val);
或者更简单:
node.setTextContent("\""+val+"\"");
或者可能对我更好一点(我不喜欢串接字符串):
但是,我不明白为什么要转义“
,因为(在文本节点中)不会破坏XML格式….我想你的意思是node.setTextContent(val)
而不是node.setTextContent(temp)
@jlordo谢谢,我甚至没有注意到有一个temp
变量-我自己会完全忽略它的…我之前试过了。如果我删除这行StringEscapeUtils.escapeXml(val);然后它甚至不会转义“”,结果它是“test”@Crypt,为什么需要转义“
?这不会破坏XML格式(除非它在属性中,但不是这样…@ppeterka..ya我试过了,它正在工作。我想”将破坏XML格式。谢谢我认为您的意思是node.setTextContent(val)
而不是node.setTextContent(temp)
@jlordo谢谢,我甚至没有注意到有一个temp
变量-我自己会完全忽略它的…我之前试过了。如果我删除这行StringEscapeUtils.escapeXml(val);然后它甚至不会转义“”,结果是“test”@Crypt,为什么需要转义“”
?这不会破坏XML格式(除非它在属性中,但不是这样…@ppeterka..ya我试过了,它正在工作。我想“会破坏XML格式。谢谢。”