문제

I am new to xslt. Below is a xml fragment from a rdlc report. I would like to write a xsl transformation that tells me about cases where the "Field" attribute "Name" is not equal to the "DataField" child element. In the sample below that would be the last field (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>
도움이 되었습니까?

해결책

Please try the stylesheet below:

<?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>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top