我的问题是我需要从XPath表达式中检索原始html,这些表达式旨在获取html的文本部分。 例如,如果我得到当前的html:
<div class='text'>
<p class='nointerrest'> blabla </p>
<p class='goodstuff'> blablabla </p>
<p class='goodstuff'> blablabla </p>
</div>
然后我的XPath表达式是字符串:
string-join(//p[@class='goodstuff'],' ')
给我:
"blablabla blablabla"
是否有一个XPath表达式可以返回我:
<p class='goodstuff'> blablabla </p>
<p class='goodstuff'> blablabla </p>
作为一个字符串? (如果可能,XPath表达式与我原来的XPath表达式最相似)
提前致谢
答案 0 :(得分:0)
您需要的不仅仅是XPath才能获得所需的输出。 XPath是一种文档查询语言,而不是XML格式化语言,因此您应该在不同的步骤中考虑这一点。
首先,使用XPath查询文档以查找NodeList
:
NodeList list = (NodeList) xpath.evaluate(
"//p[@class='goodstuff']", document, XPathConstants.NODESET);
然后创建Transformer
:
javax.xml.transform.TransformerFactory tfactory =
TransformerFactory.newInstance();
javax.xml.transform.Transformer xform = tfactory.newTransformer();
并使用它输出每个节点:
for (int i = 0; i < list.getLength(); i++) {
Node node = list.item(i);
javax.xml.transform.Source src = new DOMSource(node);
java.io.StringWriter writer = new StringWriter();
javax.xml.transform.Result result = new
javax.xml.transform.stream.StreamResult(writer);
xform.setOutputProperty(
javax.xml.transform.OutputKeys.OMIT_XML_DECLARATION, "yes");
xform.transform(src, result);
System.out.println(writer.toString());
}