JTree : 노드의 속성을 자체 잎으로 추가하는 방법은 무엇입니까?

Rypel

.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 작업 예제입니다 .

편집 : 나는 그것을 알아 내고 아래 내 질문에 대답했습니다.

Rypel

글쎄, 나는 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

객체 자체가 아닌 프로토 타입 체인의 속성을 얻는 방법은 무엇입니까?

분류에서Dev

객체 내부의 속성을 하나의 속성으로 병합하는 방법은 무엇입니까?

분류에서Dev

React Native에서 종속성의 종속성을 자동으로 연결하는 방법은 무엇입니까?

분류에서Dev

노드의 내부 텍스트와 XML을 문자열로 추출하는 방법은 무엇입니까?

분류에서Dev

JTree 노드를 축소하는 방법은 무엇입니까?

분류에서Dev

기본 js : '이전'방식으로 객체에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

Bool 속성이 목록의 요소 (C #)에 자동으로 추가되는 것을 방지하는 방법은 무엇입니까?

분류에서Dev

사용자의 입력을 기반으로 Json 객체를 반복 한 다음 객체 속성을 사용하는 방법은 무엇입니까?

분류에서Dev

바인딩 목적으로 사용자 정의 속성을 사용자 정의에 추가하는 방법은 무엇입니까?

분류에서Dev

Typescript의 "window"전역 개체에 "adsbygoogle"애드 센스 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

XML 노드의 값을 기반으로 자식 개체를 부모 목록 (예 : List <Parent>)으로 역 직렬화하는 방법은 무엇입니까?

분류에서Dev

노드에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

XML 노드에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

XML 노드에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

xml 노드에 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

xmldocument에서 자식 노드의 속성 값을 사용하여 부모 노드의 속성 값을 얻는 방법은 무엇입니까?

분류에서Dev

Coffeescript에서 하나의 속성으로 개체 배열을 그룹화하는 방법은 무엇입니까?

분류에서Dev

자신의 속성만으로 개체를 업데이트하는 방법은 무엇입니까?

분류에서Dev

Firebase에서 자녀의 속성을 기반으로 목록을 쿼리하는 방법은 무엇입니까?

분류에서Dev

Gradle의 다른 종속성에 로컬 jar 종속성을 추가하는 방법은 무엇입니까?

분류에서Dev

자동 속성을 메서드 대신 필드로 처리하도록 ReSharper 8의 전체 코드 정리를 구성하는 방법은 무엇입니까?

분류에서Dev

TypeScript : 개체의 속성을 동적으로 설정하는 방법은 무엇입니까?

분류에서Dev

속성 값으로 배열의 개체에 템플릿을 바인딩하는 방법은 무엇입니까?

분류에서Dev

Ruby 객체의 모든 datetime 속성을 심층 형식으로 지정하는 방법은 무엇입니까?

분류에서Dev

개체의 속성 유형을 동적으로 변경하는 방법은 무엇입니까?

분류에서Dev

Scala : 추가 속성으로 열거 형을 정의하는 방법은 무엇입니까?

분류에서Dev

"자체 컴파일 된 바이너리"를 종속성으로 추가하도록 package.json을 구성하는 방법은 무엇입니까?

분류에서Dev

자바 스크립트에서 배열을 객체로 변환하는 동안 추가 속성을 추가하는 방법은 무엇입니까?

분류에서Dev

각 객체의 문자열 속성 배열을 기반으로 배열의 객체를 심층 비교 / 일치하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    객체 자체가 아닌 프로토 타입 체인의 속성을 얻는 방법은 무엇입니까?

  2. 2

    객체 내부의 속성을 하나의 속성으로 병합하는 방법은 무엇입니까?

  3. 3

    React Native에서 종속성의 종속성을 자동으로 연결하는 방법은 무엇입니까?

  4. 4

    노드의 내부 텍스트와 XML을 문자열로 추출하는 방법은 무엇입니까?

  5. 5

    JTree 노드를 축소하는 방법은 무엇입니까?

  6. 6

    기본 js : '이전'방식으로 객체에 속성을 추가하는 방법은 무엇입니까?

  7. 7

    Bool 속성이 목록의 요소 (C #)에 자동으로 추가되는 것을 방지하는 방법은 무엇입니까?

  8. 8

    사용자의 입력을 기반으로 Json 객체를 반복 한 다음 객체 속성을 사용하는 방법은 무엇입니까?

  9. 9

    바인딩 목적으로 사용자 정의 속성을 사용자 정의에 추가하는 방법은 무엇입니까?

  10. 10

    Typescript의 "window"전역 개체에 "adsbygoogle"애드 센스 속성을 추가하는 방법은 무엇입니까?

  11. 11

    XML 노드의 값을 기반으로 자식 개체를 부모 목록 (예 : List <Parent>)으로 역 직렬화하는 방법은 무엇입니까?

  12. 12

    노드에 속성을 추가하는 방법은 무엇입니까?

  13. 13

    XML 노드에 속성을 추가하는 방법은 무엇입니까?

  14. 14

    XML 노드에 속성을 추가하는 방법은 무엇입니까?

  15. 15

    xml 노드에 속성을 추가하는 방법은 무엇입니까?

  16. 16

    xmldocument에서 자식 노드의 속성 값을 사용하여 부모 노드의 속성 값을 얻는 방법은 무엇입니까?

  17. 17

    Coffeescript에서 하나의 속성으로 개체 배열을 그룹화하는 방법은 무엇입니까?

  18. 18

    자신의 속성만으로 개체를 업데이트하는 방법은 무엇입니까?

  19. 19

    Firebase에서 자녀의 속성을 기반으로 목록을 쿼리하는 방법은 무엇입니까?

  20. 20

    Gradle의 다른 종속성에 로컬 jar 종속성을 추가하는 방법은 무엇입니까?

  21. 21

    자동 속성을 메서드 대신 필드로 처리하도록 ReSharper 8의 전체 코드 정리를 구성하는 방법은 무엇입니까?

  22. 22

    TypeScript : 개체의 속성을 동적으로 설정하는 방법은 무엇입니까?

  23. 23

    속성 값으로 배열의 개체에 템플릿을 바인딩하는 방법은 무엇입니까?

  24. 24

    Ruby 객체의 모든 datetime 속성을 심층 형식으로 지정하는 방법은 무엇입니까?

  25. 25

    개체의 속성 유형을 동적으로 변경하는 방법은 무엇입니까?

  26. 26

    Scala : 추가 속성으로 열거 형을 정의하는 방법은 무엇입니까?

  27. 27

    "자체 컴파일 된 바이너리"를 종속성으로 추가하도록 package.json을 구성하는 방법은 무엇입니까?

  28. 28

    자바 스크립트에서 배열을 객체로 변환하는 동안 추가 속성을 추가하는 방법은 무엇입니까?

  29. 29

    각 객체의 문자열 속성 배열을 기반으로 배열의 객체를 심층 비교 / 일치하는 방법은 무엇입니까?

뜨겁다태그

보관