Java XML : parsing nested XML file with identical tags

标签 java xml dom

背景

我有一个 XML 文档,它表示 LabVIEW 中存储模拟参数的数据结构(一个簇的数组)。我通过将我的数据结构从 LabVIEW 保存为 XML 来生成文档,我需要保留它的通用格式,以便 LabVIEW 可以在以后读回它。文档结构如下:

<Array>
    <Cluster>
        <Name>Meaningful Name 1</Name>
        <Cluster>  <!-- note clusters within clusters -->
            <Name>Component 1 params</Name>
            <!-- Parameter values here -->
        </Cluster>
        <Cluster>
            <Name>Component 2 params</Name>
            <!-- Parameter values here -->
        </Cluster>
    </Cluster>
    <!-- More clusters of clusters -->
</Array>

每个父 Cluster 将具有完全相同的子元素(组件 1 参数、组件 2 参数等),只有它们的 Value 字段(未显示)将是不同的。每个父 Cluster 也将有一个唯一的名称。我无法更改用于指定父/子集群的标签,因为那样 LabVIEW 将不会读取文件。

到目前为止的工作

我正在开发一个 Java 应用程序,允许用户在不破坏其格式的情况下编辑存储在文档中的参数数据(以便 LabVIEW 仍然可以读取它)。我希望用户能够通过其 Name 字段选择父集群之一,然后使用其中存储的数据填充表单,以便可以编辑此数据。我的问题是使用 DocumentBuilderDocument类,我似乎不能只拆分父 Cluster 节点。

parsing XML with NodeList and DocumentBuilder 的答案开始工作:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse("param_file.xml");

NodeList nodes = doc.getElementsByTagName("Cluster");  // every Cluster is in this list, but I only want to iterate over the top-level clusters.
for (int i = 0; i < nodes.getLength(); ++i)
{
    Element node = (Element) nodes.item(i);
    // Display the cluster names for the user to select one...
}

问题

我想我正在寻找一种方法来将我的 XML 文件表示为维护树结构的对象,然后生成仅包含顶级 Cluster 元素的列表,然后每个元素都可以是钻取以获取/设置它们的子 Cluster 元素及其属性。

谢谢!

最佳答案

Document 实例已经代表了内存中 XML 的树结构。您必须在这个结构中正确导航。如果您想要顶级 Cluster 元素,您可以获取 XML 根的子节点并循环遍历它们:

List<Node> topLevelClusterElements = new ArrayList<Node>();

NodeList childNodes = doc.getDocumentElement().getChildNodes();
for(int i = 0; i < childNodes.getLength(); i++) {
    Node childNode = childNodes.item(i);
    if(childNode.getNodeType() == Node.ELEMENT_NODE && childNode.getNodeName().equals("Cluster")) {
        Element clusterElement = (Element) childNode;
        topLevelClusterElements.add(clusterElement);
    }
}

关于Java XML : parsing nested XML file with identical tags,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31272829/

相关文章:

javascript - Chrome 中的appendChild性能问题

php - 有没有办法访问包含 php 函数的 HTML 元素类名?

java - 从 ListView 中删除元素(滑动或单击)

java - 解码加密消息

java - scala 中的多变量循环

c# - 当我 add/text() 时,为什么我的 XPath 会卡在第一个结果上?

android - 如何在 Android 中将三个 imageview 按钮放在同一行

Java hashmap 构建 <String, Integer>

java - 将 xml 从 POST 读取到 http servlet 的推荐/最快方法是什么?

javascript - 从 DOM 元素绑定(bind)到 Controller 属性的一种方式 - Ember