<TD colSpan=4> Ref. : XYZ</TD>
我正在尝试使用XPATH检索值XYZ
//td[text()=" Ref. :"]
但是我无法理解......任何人都可以找到错误..
答案 0 :(得分:1)
尝试
substring-after(//TD[starts-with(text(),' Ref. :')]/text(),' Ref. : ')
产生
XYZ
<强>更新强>
在Alejandro关于列出几个节点的评论之后,这里是一个用Java列出几个TD的Java示例(标准JDK Java解析器)。
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
public class TestXPath {
private static final String FILE = "a.xhtml" ;
private static final String XPATH = "//td[starts-with(.,'Ref. :')]";
public static void main(String[] args) {
DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
docFactory.setNamespaceAware(true);
DocumentBuilder builder;
try {
builder = docFactory.newDocumentBuilder();
Document doc = builder.parse(FILE);
XPathExpression expr = XPathFactory.newInstance().newXPath().compile(XPATH);
Object hits = expr.evaluate(doc, XPathConstants.NODESET ) ;
if ( hits instanceof NodeList ) {
NodeList list = (NodeList) hits ;
for (int i = 0; i < list.getLength(); i++ ) {
System.out.println( list.item(i).getTextContent().substring( " Ref. :".length() ) );
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
应用于以下测试xhtml文件
<html>
<head>
</head>
<body>
<table>
<thead>
<tr>
<td>col1</td>
<td>col2</td>
<td>col3</td>
<td>col4</td>
</tr>
</thead>
<tbody>
<tr>
<td colSpan="4">Ref. : Line 1</td>
</tr>
<tr>
<td colSpan="4">Ref. : Line 2</td>
</tr>
<tr>
<td colSpan="4">Ref. : Line 3</td>
</tr>
<tr>
<td colSpan="4">Ref. : Line 4</td>
</tr>
</tbody>
</table>
</body>
</html>
产生
Line 1
Line 2
Line 3
Line 4
答案 1 :(得分:1)
您可以选择整个文本,然后在XSLT中对其进行子串。
<xsl:value-of
select="normalize-space(substring-after(.//html:td/text(), 'Ref. :'))"/>
答案 2 :(得分:0)
<TD colSpan=4> Ref. : XYZ</TD>
我正在尝试检索值XYZ 使用XPATH
//td[text()=" Ref. :"]
但是我无法得到那个......可以 任何人都会发现错误..
在其他任何事情之前,您的XPath表达式的一个主要问题:
//td[text()=" Ref. :"]
应用于提供的XML文档:
<TD colSpan=4> Ref. : XYZ</TD>
是XPath区分大小写。
即使其他一切都是正确的(它不是),使用小写名称的表达式在应用于包含大写字母名称的XML文档时也绝不会选择任何节点。
因此,如果我们纠正此问题,XPath表达式将变为:
//TD[text()=" Ref. :"]
虽然此表达式将选择提供的XML文档的顶部(且唯一)元素,但它不会产生所需的值。
我会使用的XPath是:
substring-after(/TD, 'Ref. : ')
或(知道格式良好的XML文档只有一个顶级元素):
substring-after(/*, 'Ref. : ')