HtmlAgilityPack을 사용하여 일부 데이터를 스크랩하고 있습니다.HtmlAgilityPack NextSibling.InnerText 값이 비어 있습니다.
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 노드과 같이 잡아 :
foreach (HtmlNode node in details)
{
if (node.InnerText.Contains("Tel:")) telephone = node.NextSibling.InnerText;
if (node.InnerText.Contains("Email:")) email = node.NextSibling.InnerText;
}
:
이
//*[@id="id-here"]/dl[1]/dt | //*[@id="id-here"]/dl[1]/dd
지금 나는 그것이 내가 원하는 필드와 일치하는지 등처럼로 nextSibling 값을 각 노드를 확인
전화에 문제가 없지만 "Email :"노드가 나타나면 어떤 이유에서든지 NextSibling.InnerHTML
& NextSibling.InnerText
은 모두 다음 형제에게는 확실히 데이터가 있지만 비어 있습니다. 실제로 내가 에 가서 그걸 보면 InnerHTML
은 전체 형식화 된 링크이고 InnerText
은 이메일 주소입니다.
NextSibling.InnerText
이 A 태그로 인해 작동하지 않습니까? 디버거에서 한 번 보았고 NextSibling
에서 필요한 정보를 찾을 수 없습니다.
나는 대답이 어리석게 간단하다라고 생각한다. 누구든지 나를 비참하게 만들었지? 이런 일
'details'를 반복하면서 선택한'dd'를 실제로 사용하지 않으려면'dd' 요소를 선택하는 이유는 무엇입니까? – JLRishe
nextSibling을 선택할 수 있도록. DD를 선택하지 않으면 nextSibling이 존재하지 않을 것입니다. – Guerrilla
'details '의 내용은 노드의 형제가 무엇인지에 관계가 없으며 정확히 여기에서 목격하고있는 내용입니다. – JLRishe