JDOM:找不到符号 getAttribute()

JDOM: cannot find symbol getAttribute()

我想获取存储在 keystore.xml:

中的密钥名称列表
<?xml version="1.0" encoding="ISO-8859-1"?>
<keystore>
<key name="key-01">
    <Verwendungszweck></Verwendungszweck>
    <Generation></Generation>
    <Version></Version>
    <Algorithmus></Algorithmus>
    <Keylength></Keylength>
    <Blocklength></Blocklength>
</key>

<key name="key-02">
    <Verwendungszweck></Verwendungszweck>
    <Generation></Generation>
    <Version></Version>
    <Algorithmus></Algorithmus>
    <Keylength></Keylength>
    <Blocklength></Blocklength>
</key>
</keystore>

不幸的是,Netbeans 说它 "cannot find symbol keyNameAttribute = keyList.get(i).getAttribute("name");"。我不明白为什么它不起作用。你有什么主意吗?这是我的代码:

    public List getKeyNames(){
    try {
        SAXBuilder builder = new SAXBuilder();
        Document document = builder.build(f);

        List keyNameList = new ArrayList();
        List keyList = new ArrayList();

        Element keystore = document.getRootElement();
        keyList = keystore.getChildren("key");
        for(int i=0; i<=keyList.size(); i++) {
            keyNameList.add((keyList.get(i)).getAttribute("name").getValue());
        }
        return keyNameList;
    } 
    catch (JDOMException e) {
        e.printStackTrace();
    }         
    catch(IOException e){
        e.printStackTrace();
        System.out.println(e.getMessage());
    } 
    return null;
}

基本上,你需要使用泛型。您当前正在使用原始类型 - 因此 keyList.get(i) 是类型 Object 的表达式。使用增强的 for 循环(或 Java 8 个流)也会更干净 - 目前您的 for 循环无论如何都有一个不合适的上限。

我怀疑你想要 (pre-Java 8):

List<String> keyNameList = new ArrayList();
Element keystore = document.getRootElement();
for (Element element : keystore.getChildren("key")) {
    keyNameList.add(element.getAttribute("name").getValue());
}

(您也应该将您的方法声明为 return 和 List<String>。)

如果您还不熟悉泛型,我会强烈建议您立即阅读它们。它们是现代 Java 编程的重要组成部分。