<?xml version="1.0" encoding="UTF-8"?>
<root>
<PETS>
<cats_stylesheet><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Cats>
<name>
<xsl:value-of select="'Felix'"/>
</name>
<breed>
<xsl:value-of select="cat/breed"
</breed>
<age>
<xsl:value-of select="cat/age"
</age>
</Cats>
</xsl:template>
</xsl:stylesheet>
]]></cats_stylesheet>
<dogs_stylesheet><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Dogs>
<name>
<xsl:value-of select="'Rover'"/>
</name>
<breed>
<xsl:value-of select="dog/breed"/>
</breed>
<age>
<xsl:value-of select="dog/age"/>
</age>
</Dogs>
</xsl:template>
</xsl:stylesheet>
]]></dogs_stylesheet>
</PETS>
</root>
这应该只是原件的副本,但只更改了狗的名字。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<PETS>
<cats_stylesheet><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Cats>
<name>
<xsl:value-of select="'Felix'"/>
</name>
<breed>
<xsl:value-of select="cat/breed"
</breed>
<age>
<xsl:value-of select="cat/age"
</age>
</Cats>
</xsl:template>
</xsl:stylesheet>
]]></cats_stylesheet>
<dogs_stylesheet><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<Dogs>
<name>
<xsl:value-of select="'Cerberus'"/>
</name>
<breed>
<xsl:value-of select="dog/breed"/>
</breed>
<age>
<xsl:value-of select="dog/age"/>
</age>
</Dogs>
</xsl:template>
</xsl:stylesheet>
]]></dogs_stylesheet>
</PETS>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:axsl="http://www.w3.org/1999/XSL/TransformAlias"
version="3.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes"
cdata-section-elements="cats_stylesheet dogs_stylesheet"
exclude-result-prefixes="xsl"/>
<xsl:namespace-alias stylesheet-prefix="axsl" result-prefix="xsl"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="dogs_stylesheet">
<xsl:variable name="contents_of_cdata">
<xsl:value-of disable-output-escaping="true" select="text()"/>
</xsl:variable>
<dogs_stylesheet>
<Dogs>
<name>
<xsl:value-of select="'Cerberus'"/>
</name>
<xsl:copy-of select="$contents_of_cdata/xsl:stylesheet/xsl:template/Dogs/node()[not(self::Dogs/name)]"/>
</Dogs>
</dogs_stylesheet>
</xsl:template>
</xsl:stylesheet>
我尝试将 CDATA 文本转换为“节点集”(使用旧的 xsltl 1.0 术语),但这不起作用。
如何才能达到想要的输出?