Как выбрать несколько тегов - PullRequest
1 голос
/ 17 февраля 2011

У меня есть этот код

<div id="teste">
<table>
<tbody>
<tr> "Lots of HTML TAGS ex: img, href, etc" </tr>
<tr> "Lots of HTML TAGS" </tr>
<tr> "Lots of HTML TAGS" </tr>
<tr> "Lots of HTML TAGS" </tr>
</tbody>
</table>
</div>

Внутри ТР много другого кода .. Иногда TR увеличивается: например: есть 1 тр | Страница 2 есть 8 т.р.

Я хочу взять все TR, которые находятся внутри div "teste" -table-tbody ... это все ..

Я пытаюсь

doc.DocumentNode.SelectNodes("//div[@id='teste']/table/tbody/tr");

Я хочу поймать ВСЕ теги TR, включая другие теги HTML, которые находятся внутри TR

ЗДЕСЬ КОД, КОТОРЫЙ ИСПОЛЬЗУЕТСЯ

<td align="left" class="portal_table_info_th">
   <div id="teste" style="display:inline;" class="smallfont">
      <table width="100%" border="0" cellspacing="2" cellpadding="0">
         <tbody>

           <tr>
           <td class="smallfont alt2">
           <b><center>TUTORIAL CSS</center></b>
           </td>
           <td width="30" class="smallfont">
           <span style="color:#000000; font-weight:bold">STATUS</span>
           </td>
           </tr>


           <tr>
           <td class="smallfont alt1"><center><a href="" target="_blank">Tutorial 1</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt2"><center><a href="" target="_blank">Tutorial 2</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt1"><center><a href="" target="_blank">Tutorial 3</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt2"><center><a href="" target="_blank">Tutorial 4</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>


           <tr>
           <td class="smallfont alt1"><center><a href="" target="_blank">Tutorial 5</a></center></td>
           <td width="30" class="smallfont"><span style="color:#009933; font-weight:bold">ON</span></td>
           </tr>

        </tbody>
   </table>
  </div>
</td>

ЗДЕСЬ другая информация ... когда я положу

doc.DocumentNode.SelectNodes("//div[@id='teste']/table/tbody/tr");

НЕ РАБОТАЕТ, возвращает нулевое значение. Но когда я ставлю

doc.DocumentNode.SelectNodes("//div[@id='teste']");

Это работает ...: /, Но принимает все теги.

Я пытаюсь использовать это, и мой документ - (данные HttpGET)

doc = new HtmlDocument();
doc.LoadHtml(data);
.
.
.
HtmlNodeCollection trtag = doc...
string trtag = doc...

Ответы [ 3 ]

1 голос
/ 17 февраля 2011

Две проблемы:

1) добавьте кавычки вокруг значения для идентификатора, в противном случае это не будет действительная разметка XML, т.е. id = "teste" (это первая причина проблемы, и после ее изменения вы будетеполучить узлы)

2) Удалить *.

doc.DocumentNode.SelectNodes("//div[@id='teste']/table/tbody/tr");

должно работать ..

РЕДАКТИРОВАТЬ: Чтобы извлечь все узлы tr, кромепоследний использует xpath "//div[@id='teste']/table/tbody/tr[position()<last()]" (обратите внимание на [position ())

Пример для извлечения узлов и преобразования в строку.

static void ExtractNodeInfo()
        {
            String xmlText = @"<div id=""teste""> <table> <tbody> <tr> ""Lots of HTML TAGS ex: img, href, etc"" </tr> <tr> ""Lots of HTML TAGS"" </tr> <tr> ""Lots of HTML TAGS"" </tr> <tr> Last ""Lots of HTML TAGS"" </tr> </tbody> </table> </div> ";
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xmlText);
            XmlNode root = doc.DocumentElement;
            XmlNodeList nodes = root.SelectNodes("//div[@id='teste']/table/tbody/tr[position()<last()]");
            StringBuilder selectedNodesOuter = new StringBuilder();
            StringBuilder selectedNodesInner = new StringBuilder();
            foreach(XmlNode node in nodes)
            {
                selectedNodesOuter.Append(node.OuterXml);
                selectedNodesInner.Append(node.InnerXml);
            }
            Console.WriteLine("######### OUTER XML #########");
            Console.WriteLine("");
            Console.WriteLine(selectedNodesOuter);
            Console.WriteLine("");
            Console.WriteLine("######### INNER XML #########");
            Console.WriteLine("");
            Console.WriteLine(selectedNodesInner);
        }
0 голосов
/ 17 февраля 2011

что не так с:

trArray=document.getElementById('teste').getElementsByTagName('tr');

, который даст вам массив всех TR (при условии, что внутри TR нет таблиц)

Если вы хотите найти теги внутри них, тогдаВы можете сделать что-то вроде

tagArray=trArray[0.getElementsByTagName('img');
0 голосов
/ 17 февраля 2011

Натан, вы можете использовать один из тысяч тестеров XPath онлайн: http://www.futurelab.ch/xmlkurs/xpath.en.html это позволяет вам быстро проверять, что вы получаете, когда вы меняете запрос xpath, быстрее, чем ждать ответа здесь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...