我是xpath新手,所以我提前道歉这个问题的基本原理。XPath只选择元素中包含的文本
如何从特定元素中提取文本?例如,我怎么会只提取“文本”
<h1>text</h1>
我尝试以下,但它似乎选择一切,包括标签,而不仅仅是文字。
//h1/text()
感谢您的帮助
我是xpath新手,所以我提前道歉这个问题的基本原理。XPath只选择元素中包含的文本
如何从特定元素中提取文本?例如,我怎么会只提取“文本”
<h1>text</h1>
我尝试以下,但它似乎选择一切,包括标签,而不仅仅是文字。
//h1/text()
感谢您的帮助
`
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)。 希望它有帮助
这个答案相当于XPath答案的XSLT答案,但许多概念仍然适用。
XPath表达式
//h1/text()
似乎是正确的。它确实选择所有text()
节点,这些节点是<h1>
元素的直接子节点。
但有一个问题可能是,该XSL默认模板还是将所有其他text()
节点等记载here in the W3C specification:
在没有选择属性,在xsl:应用模板指令处理所有的当前节点的子节点,包括文本节点。
所以要解决你的问题,你必须定义一个明确的模板
忽略所有其他文本()节点这样的:
<xsl:template match="text()" />
如果这一行添加到您的XSL处理,结果很可能会让你更愉快。
非常感谢你的帮助 – affemann2
当然,它不会选择任何标签,因为标签不是可供选择的对象:源树上没有标签,只有节点。如果您描述导致您对此问题进行错误诊断的症状,这将有所帮助。 –