Как я могу создать точную копию дочерних элементов xml-узла с помощью XSLT?

StackOverflow https://stackoverflow.com/questions/56837

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

Какой XSL требуется для этого?

Это было полезно?

Решение

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

Это называется "трансформацией идентичности" в Спецификация XSLT.

Другие советы

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

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

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

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

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

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

При этом копируются все дочерние элементы, найденные в теге с именем <here>.

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

http://www.dpawson.co.uk/xsl/sect2/N1930.html объясняет возможные варианты

xsl: копия

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top