try {
String data = "<a><b c='d' e='f'>0.15</b></a>";
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(data));
Document document = documentBuilder.parse(is);
NodeList nl = document.getElementsByTagName("b");
Node n = (Node) nl.item(0);
System.out.println(n.getNodeValue());
} catch (Exception e) {
System.out.println("Exception " + e);
}
Run Code Online (Sandbox Code Playgroud)
我希望它打印0.15,但它打印为null.有任何想法吗?
编辑:这样做了
if (n.hasChildNodes())
System.out.println(n.getFirstChild().getNodeValue());
else
System.out.println(n.getNodeValue());
Run Code Online (Sandbox Code Playgroud)
Seb*_*olm 11
那是因为一个元素实际上没有nodeValue.相反,它有一个文本节点作为孩子,它有nodeValue你想要的.
简而言之,您将希望getNodeValue()在元素节点的第一个子节点上.
有时元素包含多个文本节点,因为它们具有最大大小,在这种情况下,您需要从之前链接的页面中获取一些内容:
public static String getNodeValue(Node node) {
StringBuffer buf = new StringBuffer();
NodeList children = node.getChildNodes();
for (int i = 0; i < children.getLength(); i++) {
Node textChild = children.item(i);
if (textChild.getNodeType() != Node.TEXT_NODE) {
System.err.println("Mixed content! Skipping child element " + textChild.getNodeName());
continue;
}
buf.append(textChild.getNodeValue());
}
return buf.toString();
}
Run Code Online (Sandbox Code Playgroud)
尝试从Element而不是Node中提取它:
try {
String data = "<a><b c='d' e='f'>0.15</b></a>";
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory
.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(data));
Document document = documentBuilder.parse(is);
NodeList nl = document.getElementsByTagName("b");
Element el = (Element) nl.item(0);
Text elText = (Text) el.getFirstChild();
String theValue = elText.getNodeValue();
System.out.println(theValue);
} catch (Exception e) {
System.out.println("Exception " + e);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25535 次 |
| 最近记录: |