Как извлечь внутреннюю таблицу из html файла с помощью html agility pack? - PullRequest
2 голосов
/ 31 марта 2010

Я анализирую табличную информацию из html-файла с помощью html-пакета agility.

Теперь я могу это сделать, и это работает.

Но когда таблица, которую я хочу извлечь, является самой внутренней.

Или я не знаю, в какой позиции он находится во вложенных таблицах. И может быть любое количество вложенных таблиц, и из этого я хочу извлечь информацию о таблице, которая имеет имя столбца имя, адрес.

Ex.

<table>
    <table>
           <tr><td>PHONE NO.</td><td>OTHER INFO.</td></tr>
           <tr><td>
              <table>
                 <tr><td>AMOUNT</td></tr>
                 <tr><td>50000</td></tr>
                 <tr><td>80000</td></tr>
              </table>
           </td></tr>
           <tr><td>
              <table>
                 <tr><td>
                     <table>
                         <tr><td>
                              <table>
                                 <tr><td> NAME </td><td>ADDRESS</td>
                                 <tr><td> ABC  </td><td> kfks   </td>
                                 <tr><td> BCD  </td><td> fdsa   </td>
                              </table>
                         </tr></td>
                     </table>
                 </td></tr>
              </table>
           </td></tr>
        </table>

Существует много таблиц, но я хочу извлечь таблицу с именем столбца name, address. И что же мне делать ?

Ответы [ 2 ]

2 голосов
/ 31 марта 2010

Загрузить документ как HtmlDocument. Затем используйте запрос XPath, чтобы найти таблицу, которая не содержит других таблиц и в первой строке которой содержится «имя».

Реализация XPath является стандартной .NET от System.Xml.XPath, поэтому будет применима любая документация по использованию XPath с XmlDocument.

HtmlDocument doc = new HtmlDocument();
doc.Load("file.html");
HtmlNode el = (HtmlNode) doc.DocumentNode.SelectSingleNode("//table[not(descendant::table) and tr[1]/td['NAME' = normalize-space()]]");

Если столбец «Имя» был исправлен, вы можете использовать что-то вроде 'Name' = normalize-space(tr[1]/td[2]).

Чтобы найти таблицу на основе нескольких имен столбцов, но не на самом внутреннем условии таблицы.

HtmlNode el = (HtmlNode) doc.DocumentNode.SelectSingleNode("//table[tr[1]/td['NAME' = normalize-space()] and tr[1]/td['ADDRESS' = normalize-space()]]");
0 голосов
/ 31 марта 2010
var table = doc.DocumentNode.SelectSingleNode("//table [not(descendant::table) and tr[1]/td[normalize-space()='ADDRESS'] ]");
...