Как я могу сделать точную копию потомков узла xml с помощью XSLT? - PullRequest
3 голосов
/ 11 сентября 2008

Моя проблема в том, что в моем XML-документе содержатся фрагменты XHTML, и при прохождении его через XSLT я хотел бы, чтобы он отображал эти фрагменты без искажения их.

Я пытался обернуть фрагмент в CDATA, но он не работает, поскольку меньше и больше, чем переводятся в <и>, а не выводится напрямую.

Что XSL требуется для этого?

Ответы [ 4 ]

7 голосов
/ 12 сентября 2008
<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

В спецификации XSLT .

это называется «преобразованием идентичности».
2 голосов
/ 08 ноября 2012

Я столкнулся с этой проблемой, и копия, безусловно, самая простая в использовании. Идентификация работает, но это 5 строк кода, и вам нужно будет вызывать такой шаблон, а не просто определять его, как в вашем документе XSLT (в противном случае вы, вероятно, не получите то, что ожидали при выводе).

Моя основная проблема была в том, чтобы скопировать содержимое тега, а не сам тег. На самом деле это очень легко решить, но мне потребовалось немного времени, чтобы понять это (возможно, потому что QtXmlPatterns довольно часто падает)

Итак, следующий код копирует тег, названный здесь, и все его дочерние элементы:

<xsl:copy-of select="this/tag/here"/>

Но чаще всего вы не хотите этого делать, потому что на самом деле является контейнером, другими словами, он не должен появляться в выходных данных. В этом случае вы можете просто сделать это:

<xsl:copy-of select="this/tag/here/*"/>

Копирует всех детей, найденных в теге с именем .

1 голос
/ 12 сентября 2008

Предполагается, что ваш xhtml находится в элементе YYY

http://www.dpawson.co.uk/xsl/sect2/N1930.html объясняет опции

0 голосов
/ 11 сентября 2008

XSL: скопировать из

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...