使用 XSLT 从 SSRS/Visual Studio 导出到 XML

2024-06-22

我正在尝试通过 Visual Studio 2008 R2 (BIDS) 或 SSRS 从 RDL 文件导出,使用 XSLT 文件创建 XML。

导出结果为以下 xml 代码

<?xml version="1.0" encoding="utf-8"?>
<Report xsi:schemaLocation="testreport http://reportserver?%2Ftestreport&amp;rs%3AFormat=XML&amp;rc%3ASchema=True" Name="testreport"             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="testreport">
 <ProductList>
  <Details_Collection>
   <Details>
    <ID>602</ID>
    <Title>302</Title>
   </Details>
   <Details>
    <ID>603</ID>
    <Title>303</Title>
   </Details>
  </Details_Collection>
 </ProductList>
</Report> 

From 另一个帖子 https://stackoverflow.com/questions/19593664/ssrs-xml-reformating-using-xslt-during-export在这个网站上我得到了以下 XSLT 代码:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    exclude-result-prefixes="xsi">
  <xsl:output method="xml" indent="yes" encoding="utf-8" />

  <!-- rule to suppress the undesired nodes -->
  <xsl:template match="Report|ProductList|Details_Collection">
    <xsl:apply-templates/>
  </xsl:template>

  <!-- rule to rename the Details node -->
  <xsl:template match="Details">
    <item>
      <xsl:apply-templates/>
    </item>
  </xsl:template>

  <!-- rule to copy everything else -->
  <!-- see https://stackoverflow.com/questions/857010/xsl-avoid-exporting-namespace-defintions-to-resulting-xml-documents-->
  <!-- see https://stackoverflow.com/questions/14166259/xslt-default-template-confusion -->
  <xsl:template match="*|@*">
    <xsl:element name="{name()}">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

  <!-- rule to start the conversion and provide the wrapper tags -->
  <xsl:template match="/">
    <rss version="2.0">
      <channel>
        <xsl:apply-templates/>
      </channel>
    </rss>
  </xsl:template>

</xsl:stylesheet>

应用 XSLT 时,导出结果为以下 XML 代码

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <Report>
      <ProductList>
        <Details_Collection>
          <Details>
            <ID>602</ID>
            <Title>302</Title>
          </Details>
          <Details>
            <ID>603</ID>
            <Title>303</Title>
          </Details> 
        </Details_Collection>
      </ProductList>
    </Report>
  </channel>
</rss>

我在这里没有看到什么? “Report”、“ProductList”、“Details_Collection”不应出现在输出中,“Detail”元素应命名为“item”。似乎元素无法通过它们的名称来寻址(与似乎有效的元素唯一匹配的模板是"/", "*" and "/*")。我从来没有成功地用名称来称呼一个特定的元素。

我会期待这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
     <item>
         <ID>602</ID>
         <Title>302</Title>
      </item>
      <item>
         <ID>603</ID>
         <Title>303</Title>
      </item> 
  </channel>
</rss>

有人能帮我吗? 干杯 通信


您的输入 XML 位于名称空间,即默认命名空间:

<Report xmlns="testreport">

所有后代元素也将属于该命名空间。在你的情况下重要的是元素Report那个叫{testreport}Report (the {}告诉您存在命名空间)是完全不同的元素。

所以,如果你的模板匹配

<xsl:template match="Report">

仅当找到名称为“Report”且不在命名空间中的元素时才会触发它。反而, 如果您需要寻址特定元素的名称并且它们位于命名空间中,则需要在 XSLT 样式表中声明此命名空间并为这些元素名称添加前缀:

<xsl:stylesheet xmlns:tst="testreport">
  <xsl:template match="tst:Report">
    <!--...-->
  </xsl:template>
  <!--...-->
</xsl:stylesheet>

你观察到

唯一与似乎有效的元素匹配的模板是"/", "*" and "/*"

因为这些模式是通用模式,不使用需要前缀的特定元素名称。

XSLT 样式表

更多详细信息:无需重新声明xsi样式表中的命名空间 - 我省略了它。另外,一些处理器保留空白节点,这会导致输出格式错误 - 我已经添加了xsl:strip-space来解释这一点。

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
    xmlns:tst="testreport"
    exclude-result-prefixes="tst">
  <xsl:output method="xml" indent="yes" encoding="utf-8" />

  <xsl:strip-space elements="*"/>

  <!-- rule to suppress the undesired nodes -->
  <xsl:template match="tst:Report|tst:ProductList|tst:Details_Collection">
    <xsl:apply-templates/>
  </xsl:template>

  <!-- rule to rename the Details node -->
  <xsl:template match="tst:Details">
    <item>
      <xsl:apply-templates/>
    </item>
  </xsl:template>

  <!-- rule to copy everything else -->
  <xsl:template match="*|@*">
    <xsl:element name="{name()}">
      <xsl:apply-templates/>
    </xsl:element>
  </xsl:template>

  <!-- rule to start the conversion and provide the wrapper tags -->
  <xsl:template match="/">
    <rss version="2.0">
      <channel>
        <xsl:apply-templates/>
      </channel>
    </rss>
  </xsl:template>

</xsl:stylesheet>

XML输出

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <item>
         <ID>602</ID>
         <Title>302</Title>
      </item>
      <item>
         <ID>603</ID>
         <Title>303</Title>
      </item>
   </channel>
</rss>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 XSLT 从 SSRS/Visual Studio 导出到 XML 的相关文章

  • 如何设置 Apache FOP 中的默认语言

    我正在使用 Apache FOP 2 1 生成 PDF 文件 为此 我尝试将默认语言设置为英语 这应该在通过 Adob e Reader 的选项 文件 属性 高级 阅读选项 创建 PDF 后进行验证 该值当前为空 我尝试过设置xml lan
  • XPATH / XSLT:选择父节点的属性与另一个节点的属性匹配的节点

    我正在尝试使用 XPath 和 XSLT 对以下 XML 进行转换
  • 在本地托管 W3 XML 架构文件

    我在一家公司工作 我们有自己的 XML 语言 有自己的一组模式来验证W3 架构 https www w3 org 2009 01 xml xsd 出于业务原因 我需要在内部托管这些文件 而不是依赖于网络托管版本 我对 XML 模式缺乏经验
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • glut、glew dll:二进制文件不是使用调试信息构建的

    这是我得到的输出 abc exe Loaded C Windows system glut32 dll Binary was not built with debug information abc exe Loaded C Windows
  • 使 XSLT 结果文档由“父”XSLT 文档递归处理

    我有文档grandchild xml 其使用granchild xsl处理后的结果必须转发到child xsl 然后它必须最终由parent xsl处理和输出 我尝试过添加一个xml stylesheet元素添加到结果文档中 期望使用引用的
  • 如何在 Visual Studio 2017 中禁用 JavaScript 构建错误?

    我刚刚将 Visual Studio 2017 从 RC 更新为最终版本 我没有收到以下错误 但最近收到此错误 在构建项目时 我收到以下错误 它阻止了 Web 项目启动 Severity Code Description Project F
  • Easy XPathNavigator GetAttribute

    刚刚开始我的第一次尝试XPathNavigator 这是我的简单 xml
  • 在 Resharper 分析中忽略设计器和生成的文件

    我已经使用 Resharper 几天了 我真的很喜欢这个工具 但是有一件事让我很恼火 我想知道它是否可以改变 我从生成的代码中收到大量问题通知 我的项目中几乎有 1400 个 我想将这些文件设置为忽略 这样它们就不会像使用 StyleCop
  • XSL 如果需要帮助请

    我正在将 html 表单转换为 xml 序列 我使用递归函数来实现此目的 因此参数 list 的输入将采用以下形式 name value name value name value 下面的模板可以很好地完成此操作并返回一个 xml 序列 如
  • Xpath 中不同吗?

    我有这个 XML 文件 我想从中计算其中引用的用户数量 但它们可能出现在多个类别中 我希望不要考虑这些重复项 在下面的示例中 查询应返回 3 而不是 4 XPath 有没有办法做到这一点 用户根本没有排序
  • 您可以在 xslt 测试属性中放置两个条件吗?

    这适合当 4
  • 在 Visual Studio 中发布事件之后

    我试图在发布事件后调用简单的任务 当我说 发布 时 我的意思是在 Visual Studio 中发布 右键单击项目并按 发布 我已在项目文件中包含 导入 目标文件 该文件工作正常 因为我已经在构建事件上对其进行了测试 我发现在http ms
  • 获取 SSRS 的报告列表?

    我刚刚开始使用 SSRS 到目前为止 我已经能够通过对报告路径进行硬编码 使用 ReportViewer 在我的 Winforms 应用程序中显示报告 我想从 SSRS 获取一份报告列表 以便我可以显示它们并让用户选择他们想要查看的报告 有
  • 使用 xslt 将 xml 元素移动到另一个元素

    我有一个如下所示的 XML
  • 报告生成器:我可以链接到报告的特定部分吗?

    我想链接到另一份报告中报告的特定部分 在互联网上快速搜索并没有给我任何建议 所以我想我应该在这里问你们聪明的人 我真的在寻找类似 HTML 中的锚点的东西 但只是为了一份报告 如果您已经知道要跳转的报告页面 那么我认为您应该使用 转到 UR
  • CollapsingToolbarLayout 无法识别滚动 fling

    我创建了一个简单的折叠工具栏布局它就像一个魅力 我的问题是 如果我尝试在嵌套滚动视图 当我松开手指时它就会停止 正常的滚动就像它应该的那样工作 我的活动代码是不变 gt 自动生成空活动 我只是单击了 android studio 中的 创建
  • JAXB、XJC -> 创建多个类文件

    我是第一次使用 JAXB 和 XJC 我想从 XML 文件生成 Java 类 所以我使用这个在线帮手 http www xmlforasp net CodeBank System Xml Schema BuildSchema BuildXM
  • 如何处理 FOR XML PATH/AUTO 中的空白值 - SQL Server?

    有没有人对这种 SQL Server 行为有任何见解或遇到过 当空白值转换为数据类型时 char 或具有 的列char 作为数据类型 处理使用For XML PATH 它返回 XML 结果 20 空格的特殊字符编码 当相同的空白值转换为va
  • 拆分 Apache Camel 后恢复标头值

    我有一个 xml 其中使用 split 标签在 Spring DSL 中进行处理 我所做的基本上是在 xml 中搜索一个值 当我找到这个值时 我需要获取另一个标签的值 同一元素的子元素 并将其保存到标头 这个操作看起来很简单 但我无法在拆分

随机推荐