1

XMLDom パーサーを使用して以下を解析しています。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<company>
    <Staff id="1">
        <firstname>Achyut</firstname>
        <lastname>khanna</lastname>
        <nickname>Achyut</nickname>
        <salary>900000</salary>
    </Staff>
</company>

XML からの firstName だけが必要な場合、なぜ null を返すのですか?

private String getNodeValue(Node node) {
        Node nd = node.getFirstChild();     
        try {
            if (nd == null) {
                return node.getNodeValue();             
            }
            else {              
                 getNodeValue(nd);
            }
        } catch (Exception e) {

            e.printStackTrace();
        }
        return null;
    }
4

3 に答える 3

1

ノードリストを取得してから、定義した関数を呼び出すときに適切なノード値をパラメーターとして渡す必要があります。

NodeList n = item.getElementsByTagName("Staff");

次に、関数を呼び出します

String firstName = getNodeValue(n.item(0));
于 2013-09-02T09:47:04.440 に答える
0

まず、DOM トラバーサルを使用して XML を解析することはお勧めしません。OXM (JaxB または XMLbeans) を使用することをお勧めします。それでも、この方法で行うことに興味がある場合:

ここにコードがあります

public class T2 {
public static void main(String []args) throws ParserConfigurationException, SAXException, IOException{
DocumentBuilder db = null;

String xmlString = "<?xml version='1.0' encoding='UTF-8' standalone='no'?><company>    <Staff id='1'>        <firstname>Achyut</firstname>        <lastname>khanna</lastname>        <nickname>Achyut</nickname>        <salary>900000</salary>    </Staff></company>";
Document doc = null;
InputSource is = new InputSource();

is.setCharacterStream(new StringReader(xmlString));

    db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    doc = db.parse(is);

    NodeList nodes = doc.getElementsByTagName("firstname");

    for (int i = 0; i < nodes.getLength(); i++) {
        if (nodes.item(i) instanceof Element) {
             Node node = (Node) nodes.item(i);
            nodes.item(i);

            String fName  = getCharacterDataFromElement(node);
            System.out.println(fName);
        }
    }


}
private static String getCharacterDataFromElement(Node e) {
    Node child = e.getFirstChild();
    if (child instanceof CharacterData) {
        CharacterData cd = (CharacterData) child;
        return cd.getData();
    }
    return null;
}
}

上記のコードが出力されますAchyut

于 2013-09-02T09:46:03.277 に答える