노드의 innerhtml을 선택하는 방법

html-agility-pack xpath xslt

문제

나는 다음 HTML 스 니펫을 가지고 :

<div class="rsw-pp rsw-pp-widget">
  <div g:type="AverageStarRating" g:secondaryurls="http://maps.google.com/?cid=12948004443906002997" g:decorateusingsecondary="http://maps.google.com/?cid=12948004443906002997" g:groups="maps" g:rating_override="2.998000" class="rsw-stars ">   </div>
</div>

첫 번째 div의 innerhtml을 가져오고 싶습니다. 예상되는 결과는 다음과 같습니다.

<div g:type="AverageStarRating" g:secondaryurls="http://maps.google.com/?cid=12948004443906002997" g:decorateusingsecondary="http://maps.google.com/?cid=12948004443906002997" g:groups="maps" g:rating_override="2.998000" class="rsw-stars ">     </div>

어떻게해야합니까? Ex <xsl:value-of select="//div[@class='rsw-pp rsw-pp-widget']/html()" /> html () 함수가 없으므로이 방법은 작동하지 않습니다. 누구든지 나를 도울 수 있을까?

수락 된 답변

사용 :

//div[@class='rsw-pp rsw-pp-widget']/node()

이는 //div[@class='rsw-pp rsw-pp-widget'] 식으로 선택된 요소의 하위 노드 (요소, 텍스트 노드, 처리 명령 또는 주석 노드)를 선택합니다.

XSLT 확인 :

이 변환 :

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="/">
     <xsl:copy-of select=
     "//div[@class='rsw-pp rsw-pp-widget']/node()"/>
 </xsl:template>
</xsl:stylesheet>

제공된 XML 문서에 적용될 때 (올바른 것으로 수정 됨) :

<div class="rsw-pp rsw-pp-widget">
    <div xmlns:g="g:g"
        g:type="AverageStarRating"
        g:secondaryurls="http://maps.google.com/?cid=12948004443906002997"
        g:decorateusingsecondary="http://maps.google.com/?cid=12948004443906002997"
        g:groups="maps" g:rating_override="2.998000" class="rsw-stars "></div>
 </div>

원하는 노드를 정확히 선택하여 출력합니다 .

    <div xmlns:g="g:g" g:type="AverageStarRating"
 g:secondaryurls="http://maps.google.com/?cid=12948004443906002997" 
 g:decorateusingsecondary="http://maps.google.com/?cid=12948004443906002997" 
 g:groups="maps" g:rating_override="2.998000" class="rsw-stars "/>

인기 답변

찾은 것처럼 XSLT에는 html() 메서드가 없습니다. 귀하의 선택 진술에 대한 권리입니다. /html() 을 제거하면 현재 <div> 요소를 선택하고 <xsl:value-of> 을 사용하면 노드의 모든 내용이 출력됩니다.

HtmlAgilityPacl의 컨텍스트에서 thsi를 사용하고 있다면 (태그를 붙인 것처럼) Oded의 접근 방식을 따르십시오 (약간 수정 된 선택 항목 사용).

var outerDivNode = doc.DocumentNode.SelectSingleNode("//div[@class='rsw-pp rsw-pp-widget']");
var innerDivText = outerDivNode.InnerHtml;


Related

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