gpt4 book ai didi

java - XML 字符 was found in the element content of the document

转载 作者:行者123 更新时间:2023-12-01 14:08:49 24 4
gpt4 key购买 nike

我正在通过 Java 应用程序上的 SQL 查询生成 pdf。我有 4M pdf 需要打印。

关于第 15092 pdf。我遇到了这个错误

Invalid xml character (unicode 0xc) was found in the element content of the document

我尝试替换为其他博客所说的内容。

    html = html.replaceAll("\000"," ");
html = html.replaceAll("/\u000c+/g", "");

我不知道我刚刚将它们放入我的 html 中。

有人有想法吗?

谢谢!

最佳答案

有多种方法可以进行替换。我更详细地描述了它们,因为我认为理解它们比仅仅复制代码更重要。

  1. 简单的逐字符替换。这适用于您的情况,因为您只想替换某个字符的出现。由于您的角色是控制字符,您(通常)不能直接插入它,而是通过以下方式之一插入:

    • Unicode 引用:html=html.replace('\u000c', ' ');//十六进制值 == 0xc
    • 八进制引用:html=html.replace('\14', ' ');//0xc == 014
    • 按其含义:html=html.replace('\f', ' ');//字符 0xc 是换页符

    Unicode 引用有点棘手,因为它们是在 Java 解析器之前处理的,因此它们不能处理对 Java 语言具有特殊含义的字符。但通过换页就可以了。

  2. 使用正则表达式。对于此任务来说,这是一个过大的解决方案,但它的工作原理是执行单个字符的精确匹配是正则表达式语法的有效子集。因此,您可以使用上述所有变体,并通过用 replaceAll 替换方法名称来构建基于正则表达式的解决方案,并将参数更改为字符串,例如html=html.replaceAll("\14", "");在这种情况下,字符引用仍然由编译器生成,对正则表达式引擎没有特殊含义。当积极使用正则表达式引擎时,您有与 Java 语言的字符引用类似的选择:

    • Unicode 引用:html=html.replaceAll("\\u000c", "");
    • 十六进制引用:html=html.replaceAll("\\x0c", "");//没有 Java 等效项
    • 八进制引用:html=html.replaceAll("\\014", "");//注意细微的差别
    • 顾名思义:html=html.replaceAll("\\f", "");

不同之处在于,这些序列在 Java 语言级别插入一个反斜杠(通过双反斜杠),形成由正则表达式引擎处理的正则表达式。因此,Unicode 引用适用于此处的所有字符。整个语法描述如下: http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

但正如您已经说过的,对于您的任务,简单的字符匹配就足够了。

那么为什么你的例子不起作用呢?

html = html.replaceAll("\000","");序列 \0 被解释为对控制字符 0x0 的引用,并且后面跟着两个零。因此它尝试查找控制字符 NUL 后跟两个零的序列。

html = html.replaceAll("/\u000c+/g", "");该序列由字符 '/' '\f' (通过正确的 unicode 序列定义) '+' '/' 组成 'g'。只有加号在 Java 的正则表达式中具有特殊含义。它的意思是“至少一个”和“尽可能多地找到”。因此,此代码会查找字符 0xc 的序列,但前提是它们由斜线框起来并后跟 'g'

关于java - XML 字符 <Unicode : 0xc> was found in the element content of the document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18693803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com