XPath 문제는 "표현식을 노드 집합으로 평가해야합니다." 오류

.net c# html-agility-pack node-set xpath

문제

다른 방법으로 이미 찾은 명시 적 XPath로 단일 노드를 검색하는 데 문제가 있습니다. 노드 가 있고 그 XPath를 얻을 수 있지만 node.XPath를 통해이 노드를 다시 검색하려고하면 "표현식이 노드 집합으로 평가되어야합니다."라는 오류가 발생합니다. 이거 작동하지 않아야합니까? 나는 HtmlDocument에 대해 C # btw에서 HtmlAgilityPack을 사용하고 있습니다.

HtmlDocument doc = new HtmlDocument();
doc.Load(@"..\..\test1.htm");
HtmlNode node = doc.DocumentNode.SelectSingleNode("(//node()[@id='something')])[first()]");
HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath);

BTW : 이것은 node.XPath의 값입니다.

"/html[1]/body[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[2]/table[1]/tr[1]/td[1]/div[1]/div[1]/table[1]/tr[1]/td[1]/div[1]/div[1]/div[4]/div[2]/div[1]/div[1]/div[4]/#text[2]"

수락 된 답변

#text를 text () 함수로 대체하여 작동시킬 수있었습니다. 왜 XPath를 처음부터 내 보낸 것이 아닌지 잘 모르겠습니다.

HtmlNode same = doc.DocumentNode.SelectSingleNode(node.XPath.Replace("#text","text()");

인기 답변

XPath는 "#text [2]"로 끝나며 "두 번째 '텍스트'속성"을 의미합니다. 속성은 노드가 아니며 노드 메타 데이터입니다.
이것은 XPath에서 공통적으로 가지고있는 문제입니다. XPath 연산이 절대적으로 노드를 추출해야하는 동안 속성 값을 원합니다.

필자가 사용한 XPath 페칭을 myXPathString.LastIndexOf ( "#") 메서드 호출을 통해 문자열의 속성 부분을 감지하고 제거한 다음 잘라낸 myXPathString을 사용하여 두 번째 단계로 원하는 속성 값을 수집하십시오.

희망은 도움이된다.
일본



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.