<TD colSpan=4> Ref. : XYZ</TD>
我試圖使用XPATH無法使用// TD檢索值文本()=「參考:」在XPATH
//td[text()=" Ref. :"]
檢索值XYZ,但我無法得到那......任何人都可以找到錯誤..
<TD colSpan=4> Ref. : XYZ</TD>
我試圖使用XPATH無法使用// TD檢索值文本()=「參考:」在XPATH
//td[text()=" Ref. :"]
檢索值XYZ,但我無法得到那......任何人都可以找到錯誤..
嘗試
substring-after(//TD[starts-with(text(),' Ref. :')]/text(),' Ref. : ')
國債收益率
XYZ
更新
繼亞歷杭德羅的有關列出幾個節點的話,在這裏上市是在Java中幾個陣(標準JDK Java解析器)的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
不要將混合內容數據模型中的文本節點用作XHTML,元素的字符串值是更好的選擇。 – 2011-03-04 14:25:03
@Alejandro,像這樣? 'substring-after(string(// TD [starting-with(。,'Ref。:))),'Ref。:')'或甚至'substring-after(string(// TD [starts-with字符串(。),'Ref。:')]),'Ref。:')'? – 2011-03-04 14:32:23
是的,像'substring-after(// TD [starts-with(。,'Ref。:))','Ref。:')''。但請注意,隱式轉換隻會選擇第一個選擇的「TD」。 – 2011-03-04 14:45:34
您可以選擇整個文本,然後在XSLT串吧。
<xsl:value-of
select="normalize-space(substring-after(.//html:td/text(), 'Ref. :'))"/>
我希望在java中完成.. – 2011-03-04 14:12:12
@Praneel然後選擇整個文本值,然後在Java中創建子字符串。我不認爲你不能在XPath表達式中使用節點的值。 – 2011-03-04 14:53:58
<TD colSpan=4> Ref. : XYZ</TD>
我試圖檢索值XYZ 使用XPATH
//td[text()=" Ref. :"]
,但我無法得到那個......能 任何人發現錯誤..
別的之前,你的XPath表達式的一個重大問題:被應用在提供XML文檔
//td[text()=" Ref. :"]
:
<TD colSpan=4> Ref. : XYZ</TD>
是,XPath是大小寫敏感的。
即使其他所有東西都是正確的(不是這樣),使用小寫名稱的表達式在應用於包含大寫名稱的XML文檔時決不會選擇任何節點。
所以,如果我們解決此問題的XPath表達式變成:
//TD[text()=" Ref. :"]
雖然這種表達會選擇頂部(只)提供的XML文檔的元素,也不會產生想要的值。
我會使用XPath是:
substring-after(/TD, 'Ref. : ')
或(知道一個良好的XML文檔僅具有一個頂部元件):
substring-after(/*, 'Ref. : ')
好問題,1。請參閱我的答案,以解釋XPath表達式的問題以及完整,簡短和簡單的解決方案。 :) – 2011-03-04 18:56:30