dụ XML của bạn không cần đến nó (xem @ câu trả lời empo của), nhưng khi bắt đầu điều quan trọng nhất để tìm hiểu là mẫu "biến đổi nhận dạng". Về cơ bản nó sao chép tất cả các đầu vào XML của bạn như là và chưa sửa đổi. Bất kỳ thay đổi nào bạn cần thực hiện thường có thể được thực hiện bằng cách ghi đè biến đổi nhận dạng với các mẫu khác.
Dưới đây là một ví dụ stylesheet cung cấp cho bạn kết quả bạn đang tìm kiếm:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<!--IDENTITY TRANSFORM-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ABC">
<CDE F="">
<ABC G="">
<xsl:copy-of select="@*"/>
</ABC>
</CDE>
</xsl:template>
</xsl:stylesheet>
LƯU Ý: Các "bản sắc chuyển hóa" không được sử dụng khi xử lý XML đầu vào của bạn bởi vì match="/ABC"
mẫu xử lý một trong những yếu tố bạn có. Tuy nhiên, nếu bạn đã thêm một cái gì đó vào XML của bạn, nó sẽ được bao gồm trong đầu ra không thay đổi.
Ví dụ, đây XML đầu vào biến đổi:
<ABC X="" Y="" Z="">
<FOO BAR=""/>
</ABC>
transfomed với stylesheet sau (tương tự như trên, chỉ có tôi thêm <xsl:apply-templates/>
đến /ABC
mẫu):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<!--IDENTITY TRANSFORM-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/ABC">
<CDE F="">
<ABC G="">
<xsl:copy-of select="@*"/>
<xsl:apply-templates/>
</ABC>
</CDE>
</xsl:template>
</xsl:stylesheet>
sản xuất như sau đầu ra:
<CDE F="">
<ABC G="" X="" Y="" Z="">
<FOO BAR=""/>
</ABC>
</CDE>
Nguồn
2011-07-01 06:22:23
+1 cho câu hỏi sạch. –
+1 cho những gì empo đã nói –