Можно ли выбрать узел, который просто включает в себя подмножество дочерних узлов? - PullRequest
2 голосов
/ 27 февраля 2011

У меня есть XPath:

//tbody/tr[2]/td/div/table/tbody/tr[2]/td[position() > 1]

, который дает мне все, кроме первого дочернего узла.Тем не менее, это дает мне список узлов заметок в результате.Я хочу выбрать родительский узел tr, но с удаленным первым дочерним узлом td.

Возможно ли это использовать только xpath?

1 Ответ

4 голосов
/ 27 февраля 2011

XPath - это язык запросов для документов XML. Как таковой он не может изменить структуру исходного XML-документа или создать новый XML-документ.

Задача создания нового измененного документа не может быть выполнена только с XPath.

Этого легко достичь с помощью XSLT :

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match="tr[2]/td[1]"/>
</xsl:stylesheet>

когда это преобразование применяется к следующему документу XML:

<table>
 <tr>
  <td>1</td>
  <td>2</td>
  <td>3</td>
 </tr>
 <tr>
  <td>1</td>
  <td>2</td>
  <td>3</td>
  <td>4</td>
 </tr>
</table>

желаемый, правильный результат (все узлы, скопированные за исключением 1-го <td> дочернего элемента второго <tr>), получается:

<table>
   <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
   </tr>
   <tr>
      <td>2</td>
      <td>3</td>
      <td>4</td>
   </tr>
</table>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...