Я очищаю некоторые данные с помощью HtmlAgilityPack.
HTML-код выглядит следующим образом:
<div id="id-here">
<dl>
<dt> Field Name </dt>
<dd> Value for above field name </dd>
<dt> Field Name </dt>
<dd> Value for above field name </dd>
<dt> Field Name </dt>
<dd> Value for above field name </dd>
</dl>
</div>
Теперь у меня проблема в том, что не всегда есть определенное количество полей, поэтому я не могу надежно получить доступ к каждому из них, например:
//*[@id="id-here"]/dl[1]/dd[1]
поскольку dd[1] может быть именем на одной странице и телефоном на другой, где пользователь не смог заполнить имя, поэтому поле скрыто.
поэтому я захватываю все узлы DT и DD следующим образом:
//*[@id="id-here"]/dl[1]/dt | //*[@id="id-here"]/dl[1]/dd
Теперь я проверяю каждый узел, чтобы увидеть, соответствует ли он нужному полю, и беру значение NextSibling следующим образом:
foreach (HtmlNode node in details)
{
if (node.InnerText.Contains("Tel:")) telephone = node.NextSibling.InnerText;
if (node.InnerText.Contains("Email:")) email = node.NextSibling.InnerText;
}
Это отлично работает для телефона, но по какой-то причине, когда появляется узел «Электронная почта:», оба NextSibling.InnerHTML
и NextSibling.InnerText
пусты, хотя у следующего брата определенно есть данные. Если я на самом деле перейду к этому node
в details
и посмотрю на него, InnerHTML
— это вся отформатированная ссылка, а InnerText
— это адрес электронной почты.
NextSibling.InnerText
не работает, потому что тег A делает его дочерним или что-то в этом роде? Я посмотрел в отладчике и просто не могу найти нужную мне информацию под NextSibling
.
Я уверен, что ответ смехотворно прост, я просто не могу понять. Кто-нибудь избавил меня от моих страданий?
dd
, если вы на самом деле не планируете использовать выбранныеdd
при перебореdetails
? - person JLRishe   schedule 27.08.2014details
не имеет никакого отношения к родственным узлам узла, и это именно то, что вы здесь видите. - person JLRishe   schedule 27.08.2014