在开发过程中使用 Visual Studio 执行转换,生成的 xml 包含来自目标中源 xml 的文本,该文本包含在与我的模板条件不匹配的标记中
我期待我在第一个模板中选择Group来找到任何名为Group的元素,它们是CrystalReport的直接子级,并在应用模板调用中传递它们。我知道我的第二个模板上的匹配过滤器只会接收具有Level=1属性的Group并将它们写出来。我希望其他一切都被忽略。
为什么“不是这个”出现在我的输出中?
资源
<?xml version="1.0" encoding="utf-8" ?>
<!--
UPDATE: Note that adding the xmlns attribute causes all output
to disappear unless you use Chris's second solution.
-->
<CrystalReport xmlns="urn:crystal-reports:schemas:report-detail" >
<Group Level="1">
<GroupHeader>
<Section>
<Field FieldName="apple" />
</Section>
</GroupHeader>
<Group Level="2">
not this
</Group>
</Group>
</CrystalReport>
转换
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/CrystalReport">
<root>
<xsl:apply-templates select="Group"/>
</root>
</xsl:template>
<xsl:template match="Group[@Level='1']/GroupHeader">
<tag1><xsl:value-of select="Section/Field/@FieldName"/></tag1>
</xsl:template>
</xsl:stylesheet>
输出
<?xml version="1.0" encoding="utf-8"?>
<root>
<tag1>apple</tag1>
not this
</root>