[英]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
字段選擇其中一個父集群,然后使用存儲在其中的數據填充表單,以便可以編輯此數據。 我的問題是使用DocumentBuilder
和Document
類,我似乎無法拆分父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.