我是xslt的新手。 下面是rdlc报告中的xml片段。 我想写一个xsl转换,它告诉我“Field”属性“Name”不等于“DataField”子元素的情况。 在下面的示例中,这将是最后一个字段(Name =“Url”)。
<?xml version="1.0" encoding="utf-8"?>
<Report xmlns="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner">
<DataSets>
<DataSet Name="TestReportModel">
<Fields>
<Field Name="Name">
<DataField>Name</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Description">
<DataField>Description</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
<Field Name="Url">
<DataField>DataFieldDoesNotMatchAttribute</DataField>
<rd:TypeName>System.String</rd:TypeName>
</Field>
</Fields>
</DataSet>
</DataSets>
</Report>
答案 0 :(得分:0)
请尝试下面的样式表:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:def="http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition"
xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
exclude-result-prefixes="def rd">
<xsl:strip-space elements="*"/>
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:apply-templates select="def:Report/def:DataSets/def:DataSet/def:Fields/def:Field[@Name != def:DataField]"/>
</xsl:template>
<xsl:template match="def:Field">
<Field>
<xsl:copy-of select="@*"/>
<DataField><xsl:value-of select="def:DataField"/></DataField>
<xsl:copy-of select="rd:TypeName"/>
</Field>
</xsl:template>
</xsl:stylesheet>