Усовершенствованная потребность в XPath-выражении

Я пытаюсь проанализировать очень нечеткую и не совсем отформатированную HTML-страницу, чтобы получить некоторую информацию.

Вот один из примеров этой страницы:

<form name="Form_Envio" method="post" action="/protesto/ieptb/SP/busca/SinProtIF15.php"><code>

== Content
<p><font size="1" face="Verdana, Arial" color="#FF0000">IMPORTANTE: ESTA INFORMAÇÃO REFERE-SE APENAS A PESQUISA,NÃO TENDO VALIDADE DE CERTIDÃO</font>
</p></code><p><code><font size="1" face="Verdana, Arial" color="#003399">Pesquisa efetuada em: </font>
<font size="2" face="Verdana, Arial" color="#003399"><b>04/01/2012</b></font>
<font size="1" face="Verdana, Arial" color="#003399"> às </font>
<font size="2" face="Verdana, Arial" color="#003399"><b>14:15:03</b></font>
<font size="1" face="Verdana, Arial" color="#003399">   N. </font>
<font size="2" face="Verdana, Arial" color="#003399"><b>22620645</b> </font>
<font size="1" face="Verdana, Arial" color="#003399">RETROATIVO A CINCO ANOS ATÉ </font>
<font size="2" face="Verdana, Arial" color="#003399"><b>26/12/2011</b></font>
<font size="1" face="Verdana, Arial" color="#003399"><b>Pesquise tambem pelo R.G.</b> Para o </font>
<font size="2" face="Verdana, Arial" color="#003399"><b>C.P.F. N. 000.923.266-41</b></font>
<font size="2" face="Verdana, Arial" color="#003399">NAS CIDADES PARTICIPANTES </font>

<font>CONSTA(M) PROTESTO(S) POR FALTA DE PAGAMENTO, NO(S) SEGUINTE(S) TABELIONATO(S)</font>
== Next line is the start of useful information
<font><b>TABELIÃO DE NOTAS E DE PROTESTO DE LETRAS E TÍTULOS</b></font>
<font>     AV. VEREADOR JOÃO FERNANDES DA SILVA, 180 - Telefone: 11 4640-4542 fax 4642-3285     VILA VIRGINIA - ITAQUAQUECETUBA - SP</font>
== End of useful information
<font size="2" face="Times,Verdana,Arial" color="#003399"><font>Caso deseje mais informações sobre credor, valor e etc. </font><font>CLIQUE AQUI, </font><font>para requerer sua Certidão de Protesto.</font>
== End of Content
</font></code><font size="2" face="Times,Verdana,Arial" color="#003399"> </font></p><p><font size="2" face="Times,Verdana,Arial" color="#003399"> </font></p><font size="2" face="Times,Verdana,Arial" color="#003399">

 <p> Имея HTML выше, мне уже удалось получить дату, час, идентификатор номера запроса и документа, используемых в запросе (эту информацию можно найти в строках, в которых атрибут <font> имеет <code>size="2"</code>).</font></p><font> <p> Это XPath, который я использовал для получения необходимой мне информации:</p> <pre class="prettyprint linenums">HtmlNodeCollection tmpNodes = documentModel.DocumentNode.SelectNodes ("//font[@size='2']/b");

Следующим шагом будет извлечение информации, находящейся между разметкой ==Useful Information. В этом случае это две строки:

  1. TABELIÃO DE NOTAS E DE PROTESTO DE LETRAS E TÍTULOS

  2. AV. VEREADOR JOÃO FERNANDES DA SILVA, 180 - Telefone: 11 4640-4542 fax 4642-3285     VILA VIRGINIA - ITAQUAQUECETUBA - SP AV. VEREADOR JOÃO FERNANDES DA SILVA, 180 - Telefone: 11 4640-4542 fax 4642-3285     VILA VIRGINIA - ITAQUAQUECETUBA - SP (я могу проанализировать их после)

** Вопрос: **

Как получить эту информацию? Могу ли я использовать XPath, используя атрибут @Style? Я попытался, но это не сработало.

3 ответа

Вам просто нужен способ однозначного определения этих элементов. Например:

//font[not(@size) and contains(@style, '#003399') 
 and not(contains(@style, 'small-caps'))]

Это выбирает элементы font без атрибута size и имеет атрибут style который содержит текст #003399, но не текстовые small-caps (чтобы исключить более ранние элементы font, соответствующие другим критериям).

Обратите внимание: это возвращает элементы font напрямую, а не их дочерние элементы.


Попробуйте что-то вроде этого.. в основном удалите "@" размером

XmlDocument xml = new XmlDocument();
xml.LoadXml(str); 
XmlNodeList xnList = xml.SelectNodes"//font[size='2']/b");
foreach (XmlNode xn in xnList)
{
 Console.WriteLine(xn.InnerText);
}


Я нашел то, что я хотел, используя эти XPaths:

//font[@style='font:bold 10pt/12pt sans-serif,arial;color:#003399;']/b

а также

//font[@style="font:8pt/9pt sans-serif,arial;color:#003399;']

Благодаря !

licensed under cc by-sa 3.0 with attribution.