我是xpath的新手,所以我提前为这个问题的基本内容道歉。
如何仅从特定元素中提取文本?例如,我将如何仅提取“文本”
<h1>text</h1>
我尝试了以下内容,但它似乎选择了包括标签在内的所有内容,而不仅仅是文本。
//h1/text()
感谢您的帮助
答案 0 :(得分:0)
`
DocumentBuilderFactory docFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.parse(new File("src/myFile.xml"));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
String sessionId = (String) xpath
.evaluate(
"/Envelope/Body/LoginProcessResponse/loginResponse/sessionId",
doc, XPathConstants.STRING);
`
这里Envelope是我的父元素,我只是遍历了所需的路径(在我的例子中,它是sessionid)。 希望它有所帮助
答案 1 :(得分:0)
这个答案相当于XSLT答案,而不是XPath答案,但许多概念仍适用。
XPath表达式
//h1/text()
似乎是正确的。它确实选择了text()
元素的直接子节点的所有<h1>
个节点。
但有一个问题可能是,XSL默认模板仍会复制所有其他text()
节点,如here in the W3C specification所述:
如果没有select属性,xsl:apply-templates指令将处理当前节点的所有子节点,包括文本节点。
因此,要解决您的问题,您必须定义一个明确的模板 忽略所有其他text()节点,如下所示:
<xsl:template match="text()" />
如果将此行添加到XSL处理中,结果很可能会让您感到愉快。