2014-05-07 17 views
0

我是xslt的新手。 以下是来自rdlc报告的xml片段。 我想写一个xsl转换,告诉我有关“字段”属性“名称”不等于“DataField”子元素的情况。 在下面的示例中,这将是最后一个字段(Name =“Url”)。如何使用xslt在rdlc xml中查找错误

<?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

请尝试以下样式:

<?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> 
+0

与Chrome和Firefox的测试,似乎既工作。 太好了。 谢谢。 – Devguy1024

+0

嗨,欢迎来到Stackoverflow!如果您发现有帮助或最有帮助的答案,请点击左侧的复选标记以使其显示为绿色(箭头下方)。这样,它将被标记为接受的答案。 –