2008-09-11 9 views
3

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

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

Для чего нужен XSL?

ответ

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

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

2

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

Моя основная проблема - копирование содержимого тега, а не самого тега. Это на самом деле очень легко решить, но мне потребовалось некоторое время, чтобы понять это

Таким образом, следующие копии тег с именем здесь и всех его детей (возможно, потому, что QtXmlPatterns падает совсем немного!):

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

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

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

Это копирует все дети, найденные в теге имени < здесь >.

 Смежные вопросы

  • Нет связанных вопросов^_^