分別在XPath 2.0及更高版本中XQuery 1.0及更高版本或XSLT 2.0及更高版本可以使用//span[@class = 'feed-date']/substring-after(., 'on ')
來獲取字符串值序列。如果XPath 1.0的功能不存在,則需要以主機語言迭代所有span
元素,併爲每個範圍提取字符串。
至於使用XPath 2.0 HTMLAgilityPack,看上去好像這是可能利用的https://github.com/StefH/XPath2.Net這也可在的NuGet,這樣微軟XPathNavigator
變得像XPath2Evaluate
各種擴展方法,然後讓你使用XPath 2.0功能這兩個文件都是由微軟的XPathDocument
創建的XPathNavigator
以及HTMLAgilityPack的HtmlDocument
。
下面是一個例子:
using System;
using System.Xml.XPath;
using Wmhelp.XPath2;
using HtmlAgilityPack;
namespace XPath20Net1
{
class Program
{
static void Main(string[] args)
{
XPathNavigator nav = new XPathDocument("XMLFile1.xml").CreateNavigator();
Console.WriteLine(nav.XPath2Evaluate("string-join(//span[@class = 'feed-date']/substring-after(., 'on '), ' ')"));
HtmlDocument doc = new HtmlDocument();
doc.Load("HTMLPage1.html");
Console.WriteLine(doc.CreateNavigator().XPath2Evaluate("string-join(//span[@class = 'feed-date']/substring-after(., 'on '), ' ')"));
}
}
}
隨着XML文檔是
<?xml version="1.0" encoding="utf-8" ?>
<html>
<body>
<span class="feed-date">Published on 2016-07-07</span>
<span class="feed-date">Published on 2015-02-23</span>
<span class="feed-date">Published on 2014-11-13</span>
<span class="feed-date">Published on 2014-04-28</span>
</body>
</html>
和HTML文檔是
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<p id=test>
<span class="feed-date">Published on 2016-07-07</span>
<span class="feed-date">Published on 2015-02-23</span>
<span class="feed-date">Published on 2014-11-13</span>
<span class="feed-date">Published on 2014-04-28</span>
</body>
</html>
然後輸出是
2016-07-07 2015-02-23 2014-11-13 2014-04-28
2016-07-07 2015-02-23 2014-11-13 2014-04-28
我使用螢火蟲在瀏覽器中選擇。編碼中的HtmlAglityPack都不會使用Xpath 2.0? –
瀏覽器尚未嘗試支持XPath 2.0。而HTMLAgilityPack則利用了也只實現了XPath 1.0的Microsoft .NET XPathNavigator基礎結構。因此,在這種情況下,您需要先選擇所有'// span [@class ='feed-date']'元素,然後在每個選定的跨度上使用'substring-after(。''on')'。 –
@NithinB,我已經編輯了我的答案,以顯示如何使用NuGet提供的XPath 2.0庫與HTMLAgilityPack一起使用單個XPath表達式'string-join(// span [@class ='feed-date']/substring-after(。,'on'),'')'選擇一個包含所有日期值的字符串。 –