我正在向远程服务器发出请求并使用单个字符串标记获取此xml响应。
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1405</string>
如何获取字符串标记的值(1405)?
我试过这个,但它不起作用:
NodeList nl = doc.getElementsByTagName("string");
Node n = nl.item(0);
String root = n.getNodeValue();
答案 0 :(得分:2)
除了使用DOM之外还有其他选择:
XPath - javax.xml.path(作为Java SE 5的一部分提供)
一个例子:
import java.io.StringReader;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathFactory;
import org.xml.sax.InputSource;
public class Demo {
public static void main(String[] args) throws Exception {
String xml = "<car><manufacturer>toyota</manufacturer></car>";
String xpath = "/car/manufacturer";
XPath xPath = XPathFactory.newInstance().newXPath();
assertEquals("toyota",xPath.evaluate(xpath, new InputSource(new StringReader(xml))));
}
}
JAXB - javax.xml.bind(作为Java SE 6的一部分提供)
域对象
package com.example;
import javax.xml.bind.annotations.*;
@XmlRootElement(name="string", namespace="http://schemas.microsoft.com/2003/10/Serialization/")
public class StringValue {
private String value;
@XmlValue
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
的演示强> 的
package com.example;
public class Demo {
public static void main(String[] args) {
JAXBContext jc = JAXBContext.newInstance(StringValue.class);
Unmarshaller u = jc.createUnmarshaller();
StringValue stringValue = (StringValue) u.unmarshal(xml);
System.out.println(stringValue.getValue());
}
}
答案 1 :(得分:2)
您不必在Java代码中指定XML命名空间。你得到null而不是“1045”的原因是因为n.getNodeValue()实际上返回了元素节点(org.w3c.dom.Element)的值,而不是内部文本节点(org.w3c.dom.Text)。 / p>
String root = n.getTextContent();
String root = n.getFirstChild().getNodeValue(); // in some environments safer way
答案 2 :(得分:1)
这是因为文本“1405”不是&lt; string&gt;的值。标签的元素。它是一个文本节点的值,它是&lt; string&gt;的直接子节点。标签的元素。请参阅表here。