草庐IT

Java XML : parsing nested XML file with identical tags

coder 2024-06-29 原文

背景

我有一个 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/

有关Java XML : parsing nested XML file with identical tags的更多相关文章

  1. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

    我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

  2. ruby-on-rails - 带有选项的 link_to image_tag (rel, title) - 2

    在HTML中我会写:但我必须针对ruby​​onrails对其进行调整,而且我对它还很陌生...所以我尝试了:rel="lightbox"title="mycaption">...但它不起作用,因为“rel="lightbox"title="mycaption">”部分未应用但出现在html部分上+我看到了2个图像,而我应该只看到“imagethumb”。我也试过:"lightbox",:title=>"mycaption")%>我也看到了这两张图...我应该怎么做才能获得与我编写的HTML代码等效的内容? 最佳答案 试试这个"")

  3. ruby-on-rails - 如果参数为空,则 Text_field_tag 默认值? - 2

    如果params[:date]的参数为空,我希望我的text_field_tag将当前日期作为默认值,这是我目前的代码:我想要类似:谢谢 最佳答案 您可以简单地使用“或”运算符。如果params[:end]为空,它将使用Time.now。 关于ruby-on-rails-如果参数为空,则Text_field_tag默认值?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/35520

  4. ruby-on-rails - 如何在 RoR 中使用 content_tag 嵌入标签? - 2

    我有这个可以为我生成一个超链接:我希望它显示在td标签中,所以我想使用这个content_tag来帮助我:"example")%>我想要我的td中的超链接,所以我有这样的东西:,:class=>"example")%>但是我收到语法错误,我该怎么办? 最佳答案 内联:'example')%>或block形式:'example')do%> 关于ruby-on-rails-如何在RoR中使用content_tag嵌入标签?,我们在StackOverflow上找到一个类似的问题:

  5. ruby-on-rails - stylesheet_link_tag(:all) generates reference to `all.css` on Heroku - 2

    我的布局中有stylesheet_link_tag(:all)。即使在生产环境中运行它(railss-eproduction),它在本地机器上的表现也如预期。我所说的预期是指它发出所有指向现有样式表的链接,而不将它们连接到all.css中,并且它不发出指向all的链接。CSS.但是当我将它部署到Heroku时,结果是一样的,并且在开头添加了一个指向all.css的链接。这是我不想要也不期望的,尤其是当本地机器上的生产环境不发出它时。所以问题是如何在不手动指定所有文件的情况下摆脱Heroku上的all.css链接?谢谢。 最佳答案 H

  6. ruby-on-rails - 如何使用连接表制作多模型 tag_cloud? - 2

    我有一个连接表create_table"combine_tags",force:truedo|t|t.integer"user_id"t.integer"habit_id"t.integer"valuation_id"t.integer"goal_id"t.integer"quantified_id"end其目的是让tag_cloud为多个模型工作。我把它放在application_controllerdeftag_cloud@tags=CombineTag.tag_counts_on(:tags)end我的tag_cloud看起来像这样:css_class%>#orthisdepen

  7. ruby-on-rails - 没有命名路线的rails3中的远程form_tag - 2

    使这个实际异步发布的正确咒语是什么?form_tag:controller=>:magic,:action=>:search,:method=>post,:remote=>truedomethod=post和remote=true只是在url的末尾被压扁,而不是真正使它成为一个ajaxpost。 最佳答案 我发现唯一的方法是将url参数包装在url_for方法中。form_tagurl_for(:action=>:create,:id=>@artist.id),:remote=>truedo但是,如果您需要传递method参数,您可

  8. ruby-on-rails - haml_tag 直接输出到 Haml 模板 - 2

    我的HAML模板的这个助手有什么问题?defdisplay_event(event)event=MultiJson.decode(event)markup_class=get_markup_class(event)haml_tag:li,:class=>markup_classdohaml_tag:b,"Foo"haml_tag:i,"Bar"endend这是错误:haml_tagoutputsdirectlytotheHamltemplate.Disregarditsreturnvalueandusethe-operator,orusecapture_hamltogetthevalu

  9. ruby - Rails 4 升级后格式化程序错误的未定义方法 `tagged' - 2

    我已经按照RubyScreencast指南从Rails3.2升级到Rails4。我的测试正在运行并且服务器已启动,但我在发送请求时收到错误消息:ERRORNoMethodError:undefinedmethod`tagged'for#/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/activesupport-4.0.0/lib/active_support/tagged_logging.rb:67:in`tagged'/home/mahoni/.rvm/gems/ruby-2.0.0-p195/gems/railties-4.0.0/lib/r

  10. ruby - 你如何在 Jekyll 中按帖子计数对 site.tags 进行排序? - 2

    抱歉,我是Ruby的新手,但我正在尝试向我的模板添加一个liquid标签,我可以循环显示五个最流行标签的列表。出于某种原因,这个插件在我使用时只输出一个标签。这是我在mu插件中的内容:moduleJekyllclassPopularTags这是我在模板中输入的内容:{%popular_tags%} 最佳答案 也可以在没有插件的情况下执行此操作,这意味着它可以在GitHubPages上运行.我已经在myblog上做类似的事情(也没有插件),我在这里显示了一个标签列表,其中包含帖子数,按字母顺序排序。Thesourcecodeisher

随机推荐