1
나는 여러 레벨 (레벨 1, 레벨 2, 레벨 3)을 가진 다음 XML을 가지고있다. 모든 레벨 1은 그림과 같이 탭으로 들어갑니다. xml에서 자바로 파싱하기
<?xml version="1.0" encoding="UTF-8"?>
<treeNode label="projectTags" level="0">
<reference/>
<treeNode label="category" level="1">
<reference>
<dataField name="category_id" value="2"/>
<dataField name="labelFieldValue" value="IRIS"/>
<dataField name="category" value="IRIS"/>
<dataField name="labelFieldName" value="Category"/>
<dataField name="idFieldName" value="category_id"/>
<dataField name="idFieldValue" value="2"/>
</reference>
<treeNode label="project" level="2">
<reference>
<dataField name="category_id" value="2"/>
<dataField name="projectvisible" value="1"/>
<dataField name="project" value="Acenaphthene"/>
<dataField name="labelFieldValue" value="Acenaphthene"/>
<dataField name="labelFieldName" value="Project"/>
<dataField name="projectactive" value="1"/>
<dataField name="idFieldName" value="Project_id"/>
<dataField name="idFieldValue" value="1436"/>
<dataField name="project_id" value="1436"/>
<dataField name="casrn" value="83-32-9"/>
</reference>
</treeNode>
<treeNode label="project" level="2">
<reference>
<dataField name="category_id" value="2"/>
<dataField name="projectvisible" value="1"/>
<dataField name="project" value="Acetaldehyde"/>
<dataField name="labelFieldValue" value="Acetaldehyde"/>
<dataField name="labelFieldName" value="Project"/>
<dataField name="projectactive" value="1"/>
<dataField name="idFieldName" value="Project_id"/>
<dataField name="idFieldValue" value="37"/>
<dataField name="project_id" value="37"/>
<dataField name="casrn" value="75-07-0"/>
</reference>
<treeNode label="usage" level="3">
<reference>
<dataField name="usageVisible" value="1"/>
<dataField name="labelFieldValue" value="1991 IRIS"/>
<dataField name="usage_id" value="1158"/>
<dataField name="usageActive" value="1"/>
<dataField name="parent_usage" value=""/>
<dataField name="projectActive" value="1"/>
<dataField name="parent_usage_id" value=""/>
<dataField name="idFieldName" value="usage_id"/>
<dataField name="projectVisible" value="1"/>
<dataField name="isdefault" value="0"/>
<dataField name="usage" value="1991 IRIS"/>
<dataField name="description" value=""/>
<dataField name="labelFieldName" value="usage"/>
<dataField name="idFieldValue" value="1158"/>
<dataField name="project_id" value="37"/>
</reference>
</treeNode>
</treeNode>
</treeNode>
<treeNode label="category" level="1">
<reference>
<dataField name="category_id" value="1"/>
<dataField name="labelFieldValue" value="NAAQS"/>
<dataField name="category" value="NAAQS"/>
<dataField name="labelFieldName" value="Category"/>
<dataField name="idFieldName" value="category_id"/>
<dataField name="idFieldValue" value="1"/>
</reference>
<treeNode label="project" level="2">
<reference>
<dataField name="category_id" value="1"/>
<dataField name="projectvisible" value="1"/>
<dataField name="project" value="Aquatic Acidification"/>
<dataField name="labelFieldValue" value="Aquatic Acidification"/>
<dataField name="labelFieldName" value="Project"/>
<dataField name="projectactive" value="1"/>
<dataField name="idFieldName" value="Project_id"/>
<dataField name="idFieldValue" value="1576"/>
<dataField name="project_id" value="1576"/>
<dataField name="casrn" value=""/>
</reference>
<treeNode label="usage" level="3">
<reference>
<dataField name="usageVisible" value="1"/>
<dataField name="labelFieldValue" value="All refs"/>
<dataField name="usage_id" value="651"/>
<dataField name="usageActive" value="1"/>
<dataField name="parent_usage" value=""/>
<dataField name="projectActive" value="1"/>
<dataField name="parent_usage_id" value=""/>
<dataField name="idFieldName" value="usage_id"/>
<dataField name="projectVisible" value="1"/>
<dataField name="isdefault" value="0"/>
<dataField name="usage" value="All refs"/>
<dataField name="description" value=""/>
<dataField name="labelFieldName" value="usage"/>
<dataField name="idFieldValue" value="651"/>
<dataField name="project_id" value="1576"/>
</reference>
<treeNode label="usage" level="4">
<reference>
<dataField name="usageVisible" value="1"/>
<dataField name="labelFieldValue" value="Hydrology"/>
<dataField name="usage_id" value="652"/>
<dataField name="usageActive" value="1"/>
<dataField name="parent_usage" value="All refs"/>
<dataField name="projectActive" value="1"/>
<dataField name="parent_usage_id" value="651"/>
<dataField name="idFieldName" value="usage_id"/>
<dataField name="projectVisible" value="1"/>
<dataField name="isdefault" value="0"/>
<dataField name="usage" value="Hydrology"/>
<dataField name="description" value=""/>
<dataField name="labelFieldName" value="usage"/>
<dataField name="idFieldValue" value="652"/>
<dataField name="project_id" value="1576"/>
</reference>
</treeNode>
</treeNode>
</treeNode>
</treeNode>
</treeNode>
나는 그것이
나는 다음과 같은 코드를 사용하고 같이
private DefaultMutableTreeNode buildTreeNode(Node rootNode)
{
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(rootNode.getNodeName());
System.out.println("root\t" + rootNode.getNodeName() + "\t" + rootNode.getNodeValue());
if (rootNode.hasAttributes())
{
NamedNodeMap attributes = rootNode.getAttributes();
if (attributes.item(0).toString().contains("labelFieldValue"))
{
System.out.println(attributes.item(0).toString() + "\t" + attributes.item(1).toString());
String attr = attributes.item(1).toString();
treeNode.add(new DefaultMutableTreeNode("@" + attr));
}
}
if (rootNode.hasChildNodes())
{
NodeList children = rootNode.getChildNodes();
for (int i = 0; i < children.getLength(); i++)
{
Node node = children.item(i);
short nodeType = node.getNodeType();
if (nodeType == Node.ELEMENT_NODE)
{
treeNode.add(buildTreeNode(node));
}
else if (nodeType == Node.TEXT_NODE)
{
String text = node.getTextContent().trim();
if (!text.equals(""))
treeNode.add(new DefaultMutableTreeNode(text));
}
}
}
return treeNode;
}
를 만들기 위해, JTree에로 구문 분석이 필요하지만 난
다음 얻을어떻게 해결할 수 있습니까? "labelFieldValue"아래에있는 값만 표시해야합니다.
실제로 실제로는 너무 가깝지만 정확히 원하는 방식이 아닙니다. 현재 모든 것이 루트 노드 아래에 있습니다. 그와 같은 IRIS는 부모 노드이며 Acetaldehyde에는 또 다른 자식 인 IRIS가있는 Acenaphthene와 Acetaldehyde라는 두 개의 자식 노드가 있습니다. 따라서 기본적으로 레벨을 살펴보면 계층 구조가 정의 된 방식을 알 수 있습니다. – user1631306
좋아. 휴. 논리를 생각해 내는데 꽤 오래 걸렸어. dataField가없는 루트 레벨 'reference'요소의 특별한 경우를 처리하기 위해 전역 부울 변수를 도입해야했습니다. 괜찮 으면 좋겠어? 전체 답변을 업데이트했습니다. 알려줘. – Ray
굉장합니다. 그 일은 훌륭했습니다. 마지막 한가지. 레벨 = 1 인 IRIS와 같은 7 가지 레벨이 있습니다 (제 질문에있는 이미지를 참조하십시오). JTab, IRIS, NAAQS, PPRTV 등으로 넣을 수 있습니까?) – user1631306