.NET으로 XML 파일을 시각화하고 javax.swing.JTree
있습니다. 사용의 코드 갖는 이 와 이 질문을, 나는 그것에 잎 같은 노드에서 속성을 추가로 붙어 있어요.
이 간단한 XML :
<?xml version="1.0" encoding="utf-8"?>
<!-- comment -->
<MYXML xmlns="">
<Header id=""></Header>
<Product id="" name="">
<Description>Some text</Description>
<Ref id=""></Ref>
<Data id="">
<Ref id=""></Ref>
</Data>
<Form id=""></Form>
</Product>
</MYXML>
JTree를 재귀 적으로 빌드하기 위해 구문 분석 org.w3c.dom.Document
되고 전달됩니다 org.w3c.dom.Node
.
private DefaultMutableTreeNode buildTreeNode(Node rootNode) {
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(
rootNode.getNodeName());
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));
// FIXME attributes should be leaves of their nodes
if (node.hasAttributes()) {
NamedNodeMap attributes = node.getAttributes();
for (int j = 0; j < attributes.getLength(); j++) {
Node attr = attributes.item(j);
treeNode.add(new DefaultMutableTreeNode("@" + attr));
}
}
} else if (nodeType == Node.TEXT_NODE) {
String text = node.getTextContent().trim();
if (!text.equals("")) {
treeNode.add(new DefaultMutableTreeNode(text));
}
} else if (nodeType == Node.COMMENT_NODE) {
String comment = node.getNodeValue().trim();
treeNode.add(new DefaultMutableTreeNode("#" + comment));
}
}
return treeNode;
}
결과는 내가 원하는 것이 아닙니다.
잎 "Header", "Ref"및 "Form"은 노드 여야하며 모든 속성 (표시됨 @
)은 해당 노드의 잎이어야합니다. 재귀 적 접근 방식으로 어떻게 이것을 달성 할 수 있습니까?
다음은 Gist 작업 예제입니다 .
편집 : 나는 그것을 알아 내고 아래 내 질문에 대답했습니다.
글쎄, 나는 Krzysztof의 힌트 덕분에 마침내 그것을 분류했습니다. 이제 자식이있는 노드가 올바르게 처리되고 속성 리프가 있어야합니다.
private DefaultMutableTreeNode buildTreeNode(Node rootNode) {
DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(
rootNode.getNodeName());
if (rootNode.hasAttributes()) {
NamedNodeMap attributes = rootNode.getAttributes();
for (int j = 0; j < attributes.getLength(); j++) {
String attr = attributes.item(j).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));
} else if (nodeType == Node.COMMENT_NODE) {
String comment = node.getNodeValue().trim();
treeNode.add(new DefaultMutableTreeNode("#" + comment));
}
}
}
return treeNode;
내가 원하는 것을 생산합니다.
완료를 위해 Gist 에서 수정 된 예제입니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다