如何从字符串中的 XML 加载 org.w3c.dom.Document?

2023-12-13

我有一个字符串形式的完整 XML 文档,并且想要一个Document目的。谷歌会发现各种各样的垃圾。最简单的解决方案是什么? (在Java 1.5中)

Solution谢谢马特·麦克明,我已经决定了这个实现。它对我来说具有适当的输入灵活性和异常粒度。 (很高兴知道错误是否来自格式错误的 XML -SAXException- 或者只是糟糕的 IO -IOException.)

public static org.w3c.dom.Document loadXMLFrom(String xml)
    throws org.xml.sax.SAXException, java.io.IOException {
    return loadXMLFrom(new java.io.ByteArrayInputStream(xml.getBytes()));
}

public static org.w3c.dom.Document loadXMLFrom(java.io.InputStream is) 
    throws org.xml.sax.SAXException, java.io.IOException {
    javax.xml.parsers.DocumentBuilderFactory factory =
        javax.xml.parsers.DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    javax.xml.parsers.DocumentBuilder builder = null;
    try {
        builder = factory.newDocumentBuilder();
    }
    catch (javax.xml.parsers.ParserConfigurationException ex) {
    }  
    org.w3c.dom.Document doc = builder.parse(is);
    is.close();
    return doc;
}

哇那儿!

这段代码存在一个潜在的严重问题,因为它忽略了在String(默认为 UTF-8)。你打电话时String.getBytes()平台默认编码用于将 Unicode 字符编码为字节。因此,解析器可能认为它正在获取 UTF-8 数据,而实际上它正在获取 EBCDIC 或其他数据……这不太好!

相反,请使用采用 InputSource 的 parse 方法,该方法可以使用 Reader 构造,如下所示:

import java.io.StringReader;
import org.xml.sax.InputSource;
…
        return builder.parse(new InputSource(new StringReader(xml)));

这看起来似乎没什么大不了的,但对字符编码问题的无知会导致类似于 2000 年后的阴险代码腐烂。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从字符串中的 XML 加载 org.w3c.dom.Document? 的相关文章

随机推荐

  • 有什么理由使用自动实现的属性而不是手动实现的属性?

    我理解属性相对于字段的优势 但我觉得使用自动实现的属性而不是手动实现的属性除了使代码看起来更简洁之外并没有真正提供任何优势 我感觉使用起来更舒服 private string postalCode public string PostalC
  • sra(算术右移)与 srl(逻辑右移)

    请看一下这两段伪汇编代码 1 li t0 53 sll t1 t0 2 srl t2 t0 2 sra t3 t0 2 print t1 print t2 print t3 2 li t0 53 sll t1 t0 2 srl t2 t0
  • 控制台中的 Bootstrap css 错误

    I downloaded the boostrap min css version from here But in the console its showing me a lot of errors Check the image 我正
  • 如何处理“CrossThread MessagingException”?

    我有一个简单的代码 可以通过标签组件在 GUI 中显示时间序列 这段代码位于定时器的tick事件中 有时 我收到 Microsoft VisualStudio Debugger Runtime CrossThreadMessagingExc
  • Rails 4 中的救援_来自 ActionController::RoutingError

    我有以下错误 ActionController RoutingError No route matches GET images favicon ico 我想显示不存在的链接的错误 404 页面 我怎样才能做到这一点 In applicat
  • Ninject 在 Web 服务中注入服务接口

    我的项目中有一个 Web 服务 用于将 json 数据返回给 ajax 调用 注入我的 ClientService 在常规页面上工作正常 但如何让它在 Web 服务中工作 NinjectWebCommon cs private static
  • Chart.js 替换所有数据

    我对 Chart js 有疑问 首先 我设置一个数据 然后当参数更改时 我想重新绑定整个图表 这项工作有效 但它就像旧数据仍然落后于新数据的图表 首先 gt chart Line data options 在一个事件中 gt chart L
  • Python-捕获文本中特定字符串后的下一个单词

    我试图只捕获特定字符串后的 1 个单词 例如 import re my string I love Apple juice it is delicious print my string split I love 1 1 我得到结果 App
  • 当我们使用数组名称而不是扩展运算符时有什么区别?

    如果我使用有什么区别 var numbers 1 2 3 var mainArray numbers length gt 1 numbers 而不是这个 var numbers 1 2 3 var mainArray numbers len
  • Python 从无限循环线程返回值

    因此 对于我的程序 我需要检查本地网络上的客户端 该客户端正在运行 Flask 服务器 该 Flask 服务器返回一个可以更改的数字 现在为了检索该值 我使用 requests 库和 BeautifulSoup 我想在脚本的另一部分使用检索
  • Grunt 0.4 less 任务:如何不连接目标文件

    我想从相应的 less 文件生成 css 部分文件 我使用 npm 提供的最新版本 电子邮件受保护 电子邮件受保护 在 Grunt 0 4 版本之前 我可以简单地指定模式 htdocs less less作为来源 htdocs css cs
  • 如何在 cPanel 子域上设置 laravel 项目?

    我是 cPanel 的新手 想知道哪种是在子域上托管 Laravel 项目的最佳方式 我已经创建了子域 其根目录位于主目录中 我的客户在 public html 文件夹中有其他网站 我不想弄乱它们 我应该如何进行 另外 如果您能告诉我在持续
  • 如何在 C# 中自动化后关闭 Outlook

    我正在创建一个将 Msg Outlook 文件转换为 pdf 的程序 我所做的是将 Msg 文件导出到 Html 然后将 Html 输出转换为 pdf 这是我的代码 Microsoft Office Interop Outlook Appl
  • 如何将 super 赋值给变量?

    我想做以下事情 public class Sub extends Super public Sub Super underlying if underlying null underlying super this line is ille
  • 将图像插入数据库

    我创建了一个表单 允许用户将图像上传到服务器中的文件夹 如何将图像插入数据库 我在名为 blog 的数据库中创建了一个名为 upload 的表 并创建了一个名为 image 且值为 MediumBLOB 的行 如果上面听起来不合逻辑 我如何
  • 如何在seaborn/matplotlib中绘制和注释分组条

    我有一个如下所示的数据框 我使用条形图来表示每行的订阅者 这就是我所做的 data channels sort values subscribers ascending False head 5 chart sns barplot x na
  • 代码覆盖率 GCov 不适用于 XCode 4.2 和 iOS SDK 5

    我一直试图让 GCov 在 Lion 上使用 iOS SDK 5 0 与 Xcode 4 2Build 4D199 配合使用 但没有成功 有人有这样的运气吗 我使用 Google Tools For Mac 进行单元测试 并在 libpro
  • 让放置在 IDE 中我的控件上的组件成为我的控件的子级

    我有一个后代TWinControl 事实上 目前只是这样 我将它注册为 IDE 中的组件 type TGroupPanel class TWinControl 但是 当我将其他组件放在其上时 它们会附加到表单而不是我的控件 换句话说 我希望
  • 将元素拉伸到自动计算网格的末尾,而不仅仅是显式网格

    在 CSS 网格中 您可以使用grid column 1 1将一个元素拉伸到整个explicit网格 但是 如果添加新元素并且网格自动具有比明确指定的列更多的列 则不会产生相同的效果 我可以用什么值来代替 1这将迫使项目一直延伸到网格的末尾
  • 如何从字符串中的 XML 加载 org.w3c.dom.Document?

    我有一个字符串形式的完整 XML 文档 并且想要一个Document目的 谷歌会发现各种各样的垃圾 最简单的解决方案是什么 在Java 1 5中 Solution谢谢马特 麦克明 我已经决定了这个实现 它对我来说具有适当的输入灵活性和异常粒