Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 转义双引号工作不正常_Java_Unicode_Character Encoding_Xml Parsing_Escaping - Fatal编程技术网

Java 转义双引号工作不正常

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

我正在用Java编写一个解析器,用XML dom编写一个字符串

这是我的密码

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格式。谢谢。”