使用dom java解析xml

2023-12-11

我有以下 xml:

<modelingOutput>
    <listOfTopics>
        <topic id="1">
            <token id="354">wish</token>
        </topic>
    </listOfTopics>
    <rankedDocs>
        <topic id="1">
            <documents>
                <document id="1" numWords="0"/>
                <document id="2" numWords="1"/>
                <document id="3" numWords="2"/>
            </documents>
        </topic>
    </rankedDocs>
    <listOfDocs>
        <documents>
            <document id="1">
                <topic id="1" percentage="4.790644689978203%"/>
                <topic id="2" percentage="11.427632949428334%"/>
                <topic id="3" percentage="17.86913349249596%"/>
            </document>
        </documents>
    </listOfDocs>
</modelingOutput>

想要解析这个xml文件并得到topic id and 百分比 from 文档列表

第一种方法是从 xml 获取所有文档元素,然后检查祖父节点是否为 ListofDocs。 但元素文档存在于排名文档 and in 文档列表,所以我有一个非常大的清单。

所以我想知道是否存在更好的解决方案来解析此 xml 避免 if 语句?

My code:

public void parse(){
    Document dom = null;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputSource is = new InputSource(new StringReader(xml));

    dom = db.parse(is);

    Element doc = dom.getDocumentElement();
    NodeList documentnl = doc.getElementsByTagName("document");
    for (int i = 1; i <= documentnl.getLength(); i++) {
        Node item = documentnl.item(i);
        Node parentNode = item.getParentNode();
        Node grandpNode = parentNode.getParentNode();
        if(grandpNode.getNodeName() == "listOfDocs"{
            //get value
        }
    } 
}

首先,在检查节点名称时不应进行比较Strings using ==。始终使用equals方法代替。

您可以使用 XPath 仅评估文档topic下的元素listOfDocs:

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
XPathExpression xPathExpression = xPath.compile("//listOfDocs//document/topic");

NodeList topicnl = (NodeList) xPathExpression.evaluate(dom, XPathConstants.NODESET);
for(int i = 0; i < topicnl.getLength(); i++) {
   ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用dom java解析xml 的相关文章

随机推荐

  • 根据 pandas 列中的列表值从 DataFrame 中选择行

    我是 pandas 的新手 我有一个简单的数据框 想要根据列提取某些行 然而 此列中的类型是列表 Example df pd DataFrame text1 1 2 3 text2 2 3 4 columns text list value
  • rake asset:precompile 和 RAILS_ENV=生产 rake asset:precompile 之间有什么区别?

    这两个任务有什么区别 为什么我需要在 cap 部署时添加 RAILS ENV production thanks 您需要指定RAILS ENV production环境变量 以便您的config environments productio
  • N2965 - std::bases 和 std::direct_bases 的状态是什么?

    我正在编写一个模板 它确实需要了解其参数类型的所有基类 这std bases提出的特质N2965非常适合此目的 但是我找不到有关其状态的任何可靠信息 这个提案还有效吗 如果是这样 我们什么时候可能会看到它标准化 如果没有 是否还有其他提案可
  • spect.currentframe() 在某些实现下可能不起作用?

    根据docs inspect currentframe 返回调用者堆栈的框架对象 框架 CPython实现细节 该函数依赖于Python堆栈 解释器中的框架支持 不保证存在于 Python 的所有实现 如果在没有的实现中运行 Python
  • 未为内部服务器错误响应 ASP.NET Core 3.1 设置 CORS 标头

    这是我的 CORS 配置 services AddCors options gt options AddPolicy name AllowedOrigins policyBuilder gt var urls Configuration G
  • 选择大于某个值的列

    我的问题看起来很简单 但我查了很多答案 但没有找到合适的答案 所以我有一个小数据 如下所示 我希望 count 36 只查找包含大于 36 的列 我的代码如下 count 36 lt df which df 1 19 gt 36 数据如下所
  • Tkinter 树视图选择

    from Tkinter import from ttk import import tkMessageBox class Application Frame def selected self curItem self tree focu
  • 修改 bash 脚本中的 $READLINE_LINE 和 $READLINE_POINT 值

    接听时这个问题我用了一个非常凌乱的bind函数根据 my 的结果修改当前行automplete sh script 当我最终将此脚本用于个人用途时 我尝试简化bind并尝试直接在脚本内进行所有读取和修改 到目前为止 我可以访问 READLI
  • WP7 - 列表框绑定

    我有一个 ObservableCollection 我想将其绑定到我的列表框 lbRosterList ItemsSource App ViewModel rosterItemsCollection 但是 在该集合中我还有另一个集合 Dat
  • [[: 找不到命令

    我正在没有 sudo 权限的系统上安装 RVM 理论上它应该工作得很好 但是当我添加时 s HOME rvm scripts rvm source HOME rvm scripts rvm 到 bash profile 它没有做它应该做的事
  • 检查项目后会触发哪个 CheckedListBox 事件?

    我有一个 CheckedListBox 我想要一个事件after检查一个项目 以便我可以将 CheckedItems 与新状态一起使用 由于 ItemChecked 在 CheckedItems 更新之前被触发 因此它无法开箱即用 当 Ch
  • 替换功能不替换[重复]

    这个问题在这里已经有答案了 我按照一些文档使用 JavaScript 替换函数 但它没有改变任何内容 不会抛出任何错误 知道我做错了什么吗 该变量是从 XML 中检索的 也许需要将其转换为字符串或其他内容 for var i 0 iln p
  • 通过 jQuery 在 YouTube 嵌入电影中启用自动播放

    我使用以下代码嵌入 YouTube 电影 正如您在 src 属性中看到的 有一个变量 autoplay 0 我在 jQuery 中编写了两行脚本 应将 autoplay 变量设置为 1 var title iframe ytplayer a
  • 在VBA中处理大数

    如何在VBA中处理10E22这样的非常大的数字 dim a b c as double a 1234567890123456789012 c a bit b a c 1 bit 我得到 b 0 按照建议 我改变dim a as double
  • 这是 JSON.NET 或实体框架中的错误,还是我在尝试使用 JSON.NET 序列化异常列表时做错了什么?

    尝试序列化一组错误时出现此错误 ISerialized 类型 System Data Entity Infrastruct DbUpdateConcurrencyException 没有有效的构造函数 要正确实现 ISerialized 应
  • 调用 getBluetoothService() 时没有使用 BluetoothManagerCallback

    我是安卓开发新手 我正在编写一个应用程序 它从笔记本电脑的蓝牙终端接收字符串 打开连接时 执行以下行时 我收到错误 连接被拒绝 socket connect 我尝试检查 connect 方法中发生了什么 在这里我发现 Android Stu
  • 替换为 preg_replace 中的动态变量

    我陷入了这个问题 即 我有一个像这样的数组 array name gt John email gt email protected 和这样的字符串样本 string Hi name your email is email 问题很明显 将名称
  • 无法使用接口默认方法

    我已经安装了新版本的 Visual Studio 并将项目设置为 C 8 当我尝试使用如下所示的新界面功能时 它说我无法在界面中实现 这似乎不知何故我无法使用新功能 谁能解释一下为什么 它仍然没有包含在 2019 年预览中吗 interfa
  • 使用 htaccess 将所有内容重定向到 index.php

    我正在编写一个简单的基于 PHP 的 MVC 框架 我希望这个框架能够安装在任何目录中 我的 PHP 脚本获取请求 uri 并将其分成多个段 它使段 1 成为控制器 使段 2 成为动作 当我这样做时一切都很好 http www exampl
  • 使用dom java解析xml

    我有以下 xml