如何在SSRS报表中显示格式化XML?

4

我的数据集中有一个字段,其中包含一个未格式化的XML字符串,例如:

<root><element><subelement>value</subelement></element></root>

我该如何在 Tablix 控件中“美化”并显示它?就像这样:
<root>
    <element>
        <subelement>value</subelement>
    </element>
</root>
1个回答

5
这可以通过在报告中使用嵌入代码,并使用 System.Xml.XmlTextWriter 以及 XmlTextWriterSettings.Indent = true 来实现。
打开报告属性对话框,然后在“代码”选项卡中粘贴以下函数:
Public Function FormatXml(input As String) As String
  Dim doc As New System.Xml.XmlDocument()
  doc.LoadXml(input)
  Dim sb As New System.Text.StringBuilder()
  Dim settings As New System.Xml.XmlWriterSettings()
  settings.Indent = True
  settings.IndentChars = "    "      ' This includes 4 non-breaking spaces: ALT+0160
  settings.NewLineChars = System.Environment.NewLine
  settings.NewLineHandling = System.Xml.NewLineHandling.Replace
  settings.OmitXmlDeclaration = True
  Using writer As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(sb, settings)
    doc.Save(writer)
  End Using
  Return sb.ToString()
End Function

你还需要添加对System.Xml的引用,因为它默认情况下未包含在内。在报表属性中选择“引用”选项卡,然后从.NET程序集列表中添加System.Xml

System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

然后,在您的文本框/表格的表达式中,您可以使用以下表达式:

=Code.FormatXml(Fields!YourXmlField.Value)

当你尝试部署报告时,可能会收到以下错误信息:
The definition of the report '/your.report' is invalid. Line 0:, Column: 0

这个错误信息并不是很有用,但它很可能意味着你的嵌入式代码有误。最常见的原因是引用了它找不到的类。例如,使用XmlWriterSettings而不是System.Xml.XmlWriterSettings

这在我的本地主机上运行得很好,但是在部署到远程服务器时却无法工作。我没有收到错误信息,但XML格式不正确。我已经找到了很多关于在SSRS中部署自定义程序集的信息,但没有关于如何排除使用.NET程序集的故障。你有什么想法可以帮助我解决这个问题吗? - John81
我注意到IE不能读取不同深度的缩进,而Chrome和Mozilla可以(截图)。我还没有进行调试,但我想知道你是否遇到过这个问题/有什么建议?无论如何,这都是+1!! - Peter Vandivier
1
附注:XML 必须位于 TXT BOX 元素中,而不是表格中。这在表格中无法正常工作,让我困惑了一段时间! - Harry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接