当前位置: 首页 > 面试题库 >

按名称获取XML仅直接子元素

严正初
2023-03-14
问题内容

我的问题是: 当其他元素与父元素的“孙子元素”同名时,如何直接在特定父元素下获取元素。

我正在使用Java
DOM库解析XML
元素,但遇到了麻烦。下面是
一些 我使用的XML(可一小部分):

<notifications>
  <notification>
    <groups>
      <group name="zip-group.zip" zip="true">
        <file location="C:\valid\directory\" />
        <file location="C:\another\valid\file.doc" />
        <file location="C:\valid\file\here.txt" />
      </group>
    </groups>
    <file location="C:\valid\file.txt" />
    <file location="C:\valid\file.xml" />
    <file location="C:\valid\file.doc" />
  </notification>
</notifications>

如您所见,可以在两个位置放置<file>元素。分组或外部分组。我真的希望它采用这种结构,因为它更加用户友好。

现在,每当我调用notificationElement.getElementsByTagName("file");它时,它就会为我提供所有<file>元素,包括该<group>元素下的元素。我对这些文件的处理方式不同,因此不希望使用此功能。

我想到了两种解决方案:

  1. 获取file元素的父元素并进行相应处理(取决于它是<notification>还是<group>
  2. 重命名第二个<file>元素以避免混淆。

这些解决方案都没有像仅保留事物原样并仅获取<file>元素的直接子<notification>元素那样令人满意的解决方案。

我对 IMPO 有关“最佳”方法的评论和答案 开放 态度 ,但是我对 DOM
解决方案非常感兴趣,因为这是该项目其余部分正在使用的方法。谢谢。


问题答案:

嗯,这个问题的DOM解决方案实际上非常简单,即使它不太优雅。

当我遍历filesNodeList调用时返回的时notificationElement.getElementsByTagName("file"),我仅检查父节点的名称是否为“
notification”。如果不是,那么我将其忽略,因为它将由<group>元素处理。这是我的代码解决方案:

for (int j = 0; j < filesNodeList.getLength(); j++) {
  Element fileElement = (Element) filesNodeList.item(j);
  if (!fileElement.getParentNode().getNodeName().equals("notification")) {
    continue;
  }
  ...
}


 类似资料:
  • 问题内容: 考虑以下功能: 而这个HTML部分: 显示警报框,但显示“未定义”。 问题答案: 您看到该错误的原因是因为返回了一个元素。并且a 元素没有属性。 使用此代替:

  • 现在,我有两个名称为和名称为的cookie。 我想让这个getter只从义务cookie中获取值。 我该怎么做?因此将数据拆分为单独的值并将其放入数组中。

  • 嗨,我必须读取一个xml文件,在代码的一部分中有一些字段标签,名称如示例中所述 我只想读取名为“link\u pdf”的字段 如果我用这个密码 我可以读取值,但在某些情况下这不是一个好的工作,如何通过字段名访问值? 不是工作

  • 我正在将自定义对象添加到树集中,以按升序获取名称。 我有这个节目。 请告诉我: 为什么只有一个人被显示 如何得到名字的升序

  • 问题内容: 我有一个多线程应用程序,并且通过属性为每个线程分配了唯一的名称。现在,我希望功能可以使用相应的名称直接访问线程。 类似于以下功能的东西: 上面的函数检查所有正在运行的线程,然后从正在运行的线程集中返回所需的线程。也许我想要的线程被中断了,那么上面的功能将无法正常工作。关于如何整合该功能的任何想法? 问题答案: 您可以使用ThreadGroup查找所有 活动 线程: 获取当前线程的组 通

  • 问题内容: 我搜寻了互联网,但找不到答案: 我正在使用for循环创建36个名为a1,a2等的按钮,并同时为每个按钮分配一个唯一的操作命令。 稍后,我想从actionPerformed(ActionEvent e)方法中获取按钮的名称。 我可以使ActionCommand非常容易,但是我也需要按钮的名称。 任何帮助,不胜感激! 编辑: 这是我正在使用的代码: 这为6x6网格提供了36个按钮,分别为a