Доступ к внутренним данным XML с помощью Java и Xerces - PullRequest
0 голосов
/ 16 ноября 2011

Я пытаюсь проанализировать документ XML с помощью Xerces, но я не могу получить доступ к данным внутри элементов, ниже приведен пример документа XML;

<sample>
<block>
    <name>tom</name>
    <age>44</age>
    <car>BMW</car>
</block>
<block>
    <name>Jenny</name>
    <age>23</age>
    <car>Ford</car>
</block>
</sample>

ТАК, пока единственный выход, который я могу произвестиis;

Sample
    block
      name
        age
          car
    block
      name
        age
          car

Это просто список имен узлов.Я пробовал node.getValue (), но он просто возвращает ноль, так что я предполагаю, что это неправильно!

Как я могу получить доступ к данным внутри?Вот что такое основы;

public static void display(String file) {
    try{
        DOMParser parser = new DOMParser();
        parser.parse(file);
        Document doc = parser.getDocument();
        read(doc);
    }
        catch(Exception e){e.printStackTrace(System.err);}
}


public static void read(Node node) {
    if(node == null) {return;}
        int type = node.getNodeType();
        //System.out.print((node));
        switch (type) {
        case Node.DOCUMENT_NODE: {
            display_all(((Document)node).getDocumentElement());
            break;
        }

         case Node.TEXT_NODE:

          break;
        case Node.ELEMENT_NODE: {

            System.out.println(node.getNodeName());

            NodeList child = node.getChildNodes();
            if(child != null) {
                int length = child.getLength();
                for (int i = 0; i < length ; i++) {
                        display_all(child.item(i));
                }
        }

        break;


        }
        }
}

1 Ответ

1 голос
/ 16 ноября 2011

getNodeValue() возвращает значение текстового узла, который вы в настоящее время пропускаете.

 public static void read(Node node) {
    if (node == null) {
        return;
    }

    int type = node.getNodeType();
    switch (type) {
    case Node.DOCUMENT_NODE: {
        System.out.println("Doc node; name: " + node.getNodeName());
        read(((Document) node).getDocumentElement());
        break;
    }

    case Node.TEXT_NODE:
        System.out.println("Text node; value: " + node.getNodeValue().replaceAll("\\s", ""));
        break;

    case Node.ELEMENT_NODE: {
        System.out.println("Element node; name: " + node.getNodeName());
        NodeList children = node.getChildNodes();
        int length = children.getLength();
        for (int i = 0; i < length; i++) {
            read(children.item(i));
        }
        break;
    }
    }
}

Я думаю, что вы можете запутаться в том, как на самом деле структурирован XML и каковы потомки чего-либонапример, это:

<element>
  <child_element>foo</child_element>
</element>

Приведенный выше фрагмент кода может помочь объяснить.

Это также, почему такие вещи, как dom4j, JAXB, XPath и т. д. делают вещи намного проще.

...