Java中如何解析XML标签的temperature属性值?
如何从XML中提取temperature标签的value属性值?
首先帮你排查下之前代码里的问题,再给出简单可靠的解决方案:
你之前代码的两个关键问题:
- 拼写错误:你写的
getElementsByTagName("temprature")多了个r,正确的标签名是temperature - 依赖节点位置不可靠:用
errNodes.item(2)获取节点完全依赖XML的节点顺序,一旦XML结构调整,代码就会失效,这不是稳妥的做法
正确的DOM解析方案
DOM解析里获取元素属性非常简单,只要拿到对应的Element对象,直接调用getAttribute()方法就能拿到目标属性值。基于你原来的代码,修改后的完整代码如下:
Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(new StringReader(response.toString()))); NodeList currentNodes = doc.getElementsByTagName("current"); if (currentNodes.getLength() > 0) { Element currentElement = (Element) currentNodes.item(0); // 获取temperature元素 NodeList tempNodes = currentElement.getElementsByTagName("temperature"); if (tempNodes.getLength() > 0) { Element tempElement = (Element) tempNodes.item(0); // 直接提取value属性值 String tempValue = tempElement.getAttribute("value"); System.out.println("Temperature value: " + tempValue); } // 保留你原来的country解析逻辑 NodeList countryNodes = currentElement.getElementsByTagName("country"); if (countryNodes.getLength() > 0) { System.out.println("Country: " + countryNodes.item(0).getTextContent()); } }
代码解释:
- 先获取
current节点(和你原来的逻辑一致) - 从
current节点下精准查找temperature标签,避免全局查找的冗余 - 把找到的
temperature节点转换成Element对象(Node没有属性操作方法,Element作为子类提供了相关能力) - 调用
getAttribute("value")直接拿到属性值,比操作Attributes集合更简洁直观
如果你想更高效,也可以用XPath直接定位,代码会更简洁:
XPath xpath = XPathFactory.newInstance().newXPath(); String tempValue = xpath.evaluate("/current/temperature/@value", doc); System.out.println("Temperature value: " + tempValue);
这种方式不需要逐层遍历节点,直接通过路径表达式就能拿到目标属性值,适合结构固定的XML解析场景。
内容的提问来源于stack exchange,提问作者Nano
相关产品推荐
相关产品推荐

