XSL - Как выбрать 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>

Я хотел бы получить innerhtml первого div. Ожидаемый результат:

<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>

Как я могу это сделать? 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 :

Это преобразование:

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

при применении к предоставленному XML-документу (скорректирован на корректность):

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

выбирает и выводит точно нужные узлы :

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

Популярные ответы

Как вы нашли, XSLT не имеет метода html() . Ваш оператор выбора почти прав. Если вы удалите /html() вы выберете элемент <div> который вы используете, и с помощью <xsl:value-of> выведет все содержимое узла.

Если вы используете thsi в контексте HtmlAgilityPacl (как вы отметили его), то следуйте подходу Oded (со слегка измененным выбором):

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



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему