2017-04-12 115 views
0

我是xpath新手,所以我提前道歉这个问题的基本原理。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); 
` 

这里信封就是我的父元素,我只是运行到需要的路径(在我的情况下,它是会话ID)。 希望它有帮助

0

这个答案相当于XPath答案的XSLT答案,但许多概念仍然适用。

XPath表达式

//h1/text() 

似乎是正确的。它确实选择所有text()节点,这些节点是<h1>元素的直接子节点。

但有一个问题可能是,该XSL默认模板还是将所有其他text()节点等记载here in the W3C specification

在没有选择属性,在xsl:应用模板指令处理所有的当前节点的子节点,包括文本节点。

所以要解决你的问题,你必须定义一个明确的模板
忽略所有其他文本()节点这样的:

<xsl:template match="text()" /> 

如果这一行添加到您的XSL处理,结果很可能会让你更愉快。

+0

非常感谢你的帮助 – affemann2