gpt4 book ai didi

java - 从 XMLResourceParser 获取 org.w3c.dom.Document

转载 作者:行者123 更新时间:2023-12-01 10:10:04 25 4
gpt4 key购买 nike

我计划将一些 XML 文件放入我的 res/xml 目录中,我想将这些文件加载​​到 Document 对象中(因为我当前在我的应用程序中使用这些文件,并且经常传递它们)。

正在做:

XMLResourceParser parser = getResources().getXml(R.xml.my_xml_file)

似乎是唯一的起点,XMLResourceParser 实现了 XmlPullParser,它似乎旨在迭代节点树。

我尝试使用 xpath 来提取文档的根节点,按照此答案中的代码:navigate through XML document with XMLpullParser ,但这给了我一个异常(exception),根据这个问题:Evaluating XPath an XmlResourceParser causes Exception

理想情况下,我需要将 xml 保留在 res/xml 文件夹中,因为我想要本地化内容,因此不能将其移动到 res/raw 或 res/assets。

在我实现迭代 XmlResourceParser 并构建文档之前,是否有更简单的方法来执行此操作?

最佳答案

编写代码来循环访问 XMLResourceParser 表明您是一位优秀、有礼貌的开发人员。

但是,您可能会想使用邪恶天才选项。

首先,创建一个 XmlPullParser 实现,该实现在构造函数中采用 XmlResourceParser,包装它并将其所有方法委托(delegate)给它 - 除了所有 setInput-类型方法。您希望所有这些都是无操作 stub ,因为 XmlResourceParser 将引发异常(请参阅 XmlBlock.java,第 108 行左右)。 Android studio 可以自动创建委托(delegate)方法,因此您无需手动编写所有代码。

    PullParserWrapper wrapper = new PullParserWrapper(
getResources().getXml(R.xml.my_xml_file));

注意:您的包装类可能必须有一些方法实现来处理关闭命名空间处理和其他各种事情。

接下来,您将使用 org.xmlpull.v1.sax2.Driver 来包装解析器并将其转换为 XMLReader:

    XMLReader xmlReader = new Driver(wrapper);

现在设置一个虚拟输入源(XmlResourceParser 已经知道它从哪里获取输入):

    InputSource inputSource = new InputSource(new StringReader(""));

然后使用 Transformer 将 SAX 输入转换为 DOM 输出并获取结果:

        Transformer transformer = TransformerFactory.newInstance().newTransformer();
DOMResult domResult = new DOMResult();
transformer.transform(new SAXSource(xmlReader, inputSource), domResult);
Document document = (Document) domResult.getNode();

哇哈哈哈哈哈!

关于java - 从 XMLResourceParser 获取 org.w3c.dom.Document,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176740/

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