所以我试图在这里学习一些xml解析,并且我已经掌握了它,但无论出于何种原因,我似乎必须在每个查询结束时使用"text()",否则我会得到null价值归还给我.我实际上并不理解这个"text()"结尾的功能,但我知道这没有必要,我想知道为什么我不能省略它.请帮忙!这是我的代码:
import org.w3c.dom.*;
import javax.xml.xpath.*;
import javax.xml.parsers.*;
import java.io.IOException;
import org.xml.sax.SAXException;
public class ParseClass
{
public static void main(String[] args)
throws ParserConfigurationException, SAXException,
IOException, XPathExpressionException
{
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("C:\\Users\\Brandon\\Job\\XPath\\XPath_Sample_Stuff\\catalog.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
XPathExpression expr = xpath.compile("/catalog/book[author='Thurman, Paula']/title/text()");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++)
{
System.out.println(nodes.item(i).getNodeValue());
}
}
}
Run Code Online (Sandbox Code Playgroud)
PS.如果您没有注意到.我正在使用XPath和DOM进行解析.
您正在调用getNodeValue您的结果,并且正如此文档所示(请参阅表格),它null适用于类型的节点Element.当您使用时text(),返回的集合现在包含类型的节点Text,因此您可以获得所需的结果(即title元素的内容而不是元素本身).
我还建议看一下这个有关text()xpath 用法的更多信息.
如果你想直接从你的元素中提取文本,你可以使用getTextContent而不是getNodeValue:
// Will work for both element and text nodes
System.out.println(nodes.item(i).getTextContent());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |