簡體   English   中英

Java XML:使用相同的標記解析嵌套的XML文件

[英]Java XML: parsing nested XML file with identical tags

背景

我有一個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節點。

使用NodeList和DocumentBuilder解析XML的答案開始:

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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM