XSLT를 사용하여 xml 노드 하위 항목의 정확한 복사본을 만들려면 어떻게 해야 합니까?
문제
내 문제는 내 XML 문서에 XHTML 조각이 포함되어 있고 이를 XSLT를 통해 전달하는 동안 해당 조각을 맹글링하지 않고 렌더링하고 싶다는 것입니다.
CDATA에서 스니펫을 래핑하려고 시도했지만 직접적으로 에코되는 것이 아니라 < 및 >로 변환되기 때문에 작동하지 않습니다.
이를 수행하는 데 필요한 XSL은 무엇입니까?
해결책
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
이를 '정체성 전환'이라고 합니다. XSLT 사양.
다른 팁
나는 그 문제에 직면했고 사본은 확실히 사용하기 가장 쉽습니다.ID는 작동하지만 이는 5줄의 코드이므로 XSLT 문서에 있는 것처럼 정의하는 것이 아니라 이러한 템플릿을 호출해야 합니다(그렇지 않으면 출력에서 예상한 것을 얻지 못할 수도 있습니다).
내 주요 문제는 실제로 태그 자체가 아니라 태그의 내용을 복사하는 것이었습니다.실제로 해결하기는 매우 쉽지만 이를 파악하는 데 약간의 시간이 걸렸습니다. (QtXmlPatterns가 상당히 충돌하기 때문일 수도 있습니다!)
따라서 다음은 여기에 명명된 태그와 모든 하위 항목을 복사합니다.
<xsl:copy-of select="this/tag/here"/>
그러나 대부분의 경우 <here>가 실제로 컨테이너이기 때문에 그렇게 하고 싶지 않습니다. 즉, 출력에 표시되어서는 안 됩니다.이 경우 간단히 다음과 같이 할 수 있습니다.
<xsl:copy-of select="this/tag/here/*"/>
그러면 <here>라는 태그에 있는 모든 하위 항목이 복사됩니다.
xhtml이 YYY 요소에 있다고 가정합니다.
xsl:복사본
제휴하지 않습니다 StackOverflow