XPath只选择元素中包含的文本

时间:2017-04-12 01:58:49

标签: xpath

我是xpath的新手,所以我提前为这个问题的基本内容道歉。

如何仅从特定元素中提取文本?例如,我将如何仅提取“文本”

<h1>text</h1>

我尝试了以下内容,但它似乎选择了包括标签在内的所有内容,而不仅仅是文本。

//h1/text()

感谢您的帮助

2 个答案:

答案 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处理中,结果很可能会让您感到愉快。