使用XPath查詢C#中的某些HTML文件時遇到了一些小問題。XPath - 選擇兩個節點之間的第一組兄弟
好吧,首先這裏有一個示例HTML:
<table id="theTable">
<tbody>
<tr class="theClass">A</tr>
<tr class="theClass">B</tr>
<tr>1</tr>
<tr>2</tr>
<tr>3</tr>
<tr>4</tr>
<tr>5</tr>
<tr class="theClass">C</tr>
<tr class="theClass">D</tr>
<tr>6</tr>
<tr>7</tr>
<tr>8</tr>
<tr>9</tr>
<tr>10</tr>
<tr>11</tr>
<tr>12</tr>
<tr>13</tr>
<tr>14</tr>
<tr>15</tr>
<tr class="theClass">E</tr>
<tr class="theClass">F</tr>
<tr>16</tr>
<tr>17</tr>
<tr>18</tr>
<tr>19</tr>
<tr>20</tr>
<tr>21</tr>
<tr>22</tr>
</tbody>
</table>
現在,我想要做的是隻拿到屬於B和C節點之間的那些元素(1,2,3,4 5,)。
這裏是我試過到目前爲止:
using System;
using System.Xml.XPath;
namespace Test
{
class Test
{
static void Main(string[] args)
{
XPathDocument doc = new XPathDocument("Test.xml");
XPathNavigator nav = doc.CreateNavigator();
Console.WriteLine(nav.Select("//table[@id='theTable']/tbody/tr[preceding-sibling::tr[@class='theClass'] and following-sibling::tr[@class='theClass']]").Count);
Console.WriteLine(nav.Select("//table[@id='theTable']/tbody/tr[preceding-sibling::tr[@class='theClass'][2] and following-sibling::tr[@class='theClass'][4]]").Count);
Console.ReadKey(true);
}
}
}
此代碼,跑了上面的HTML,輸出19和5 因此,只有第二個XPath表達式的作品,但只因爲它搜索具有元素前面有class=theClass
兩個元素,後面有4個元素。
我現在的問題從現在開始。我想編寫一個表達式,它將僅返回<td class="theClass"></td>
標記後面的第一組元素,而不管它跟隨多少個組。
如果我在這個HTML
<table id="theTable">
<tbody>
<tr class="theClass">A</tr>
<tr class="theClass">B</tr>
<tr>1</tr>
<tr>2</tr>
<tr>3</tr>
<tr>4</tr>
<tr>5</tr>
<tr>6</tr>
</tbody>
</table>
我的代碼運行,將輸出0和0
所以它沒有好。
有沒有人有任何想法?
謝謝!
我不會跟着你。預期的結果是什麼? –
@ChuckSavage對於第一個HTML,我期望返回元素1,2,3,4,5和第二個HTML元素1,2,3,4,5,6。 –