使用Element.getAttribute()无法获取元素值

我想读一个xml文件。 我找到了一个好的例子,直到xml元素没有任何属性。 当然,我试图照顾我怎样才能读取属性,但它不起作用。

例如XML

    red    

Java代码:

 public void readXML(String file) { try { File fXmlFile = new File(file); DocumentBuilderFactory dbFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); doc = dBuilder.parse(fXmlFile); doc.getDocumentElement().normalize(); for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) nNode; System.out.println("test : " + getTagValue("test", eElement)); System.out.println("colour : " + getTagValue("colour", eElement)); } } } catch (Exception e) { e.printStackTrace(); } } public String getTagValue(String sTag, Element eElement) { NodeList nlList = eElement.getElementsByTagName(sTag).item(0) .getChildNodes(); Node nValue = (Node) nlList.item(0); System.out.println(nValue.hasAttributes()); if (sTag.startsWith("test")) { return eElement.getAttribute("w"); } else { return nValue.getNodeValue(); } } 

输出:

测试:

颜色:红色

我的问题是,我无法打印出属性。 我怎么能得到属性?

您的代码有很多错误; 未声明的变量和看似疯狂的算法。 我重写了它,它的工作原理:

 import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public final class LearninXmlDoc { private static String getTagValue(final Element element) { System.out.println(element.getTagName() + " has attributes: " + element.hasAttributes()); if (element.getTagName().startsWith("test")) { return element.getAttribute("w"); } else { return element.getNodeValue(); } } public static void main(String[] args) { final String fileName = "c:\\tmp\\test\\domXml.xml"; readXML(fileName); } private static void readXML(String fileName) { Document document; DocumentBuilder documentBuilder; DocumentBuilderFactory documentBuilderFactory; NodeList nodeList; File xmlInputFile; try { xmlInputFile = new File(fileName); documentBuilderFactory = DocumentBuilderFactory.newInstance(); documentBuilder = documentBuilderFactory.newDocumentBuilder(); document = documentBuilder.parse(xmlInputFile); nodeList = document.getElementsByTagName("*"); document.getDocumentElement().normalize(); for (int index = 0; index < nodeList.getLength(); index++) { Node node = nodeList.item(index); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; System.out.println("\tcolour : " + getTagValue(element)); System.out.println("\ttest : " + getTagValue(element)); System.out.println("-----"); } } } catch (Exception exception) { exception.printStackTrace(); } } } 

如果您有该文件的架构,或者可以创建一个架构,则可以使用XMLBeans 。 顾名思义,它使Java bean脱离了XML。 然后你可以使用getter获取属性。

使用dom4j库。

 InputStream is = new FileInputStream(filePath); SAXReader reader = new SAXReader(); org.dom4j.Document doc = reader.read(is); is.close(); Element content = doc.getRootElement(); //this will return the root element in your xml file List methodEls = content.elements("element"); // this will retun List of all Elements with name "element" Attribute attrib = methodEls.get(0).attribute("attributeName"); // this is the "attributeName" attribute of first element with name "element" 

如果你纯粹想要获取属性(例如config / ini文件),我建议使用java属性文件。

http://docs.oracle.com/javase/tutorial/essential/environment/properties.html

如果您只想读取文件,请创建一个新的fileReader并将其放入bufferedReader中。

 BufferedReader in = new BufferedReader(new FileReader("example.xml"));