Как я могу создать точную копию дочерних элементов xml-узла с помощью XSLT?
Вопрос
Моя проблема в том, что мой 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: копия