我有一个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>
Run Code Online (Sandbox Code Playgroud)
每个父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...
}
Run Code Online (Sandbox Code Playgroud)
我想我正在寻找一种方法来表示我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3398 次 |
| 最近记录: |