gpt4 book ai didi

xml - SSRS 报告上的 XSLT

转载 作者:数据小太阳 更新时间:2023-10-29 01:53:40 24 4
gpt4 key购买 nike

我想翻译一个包含如下数据的 XML 文件:

<FlatData>
<Details1_Collection>
<Details1 Customer1="Customer" Total1="3" />
...
</Details1_Collection>
</FlatData>

我感兴趣的数据是每个Details1中的属性及其值.问题是这些属性在我要翻译的每个 XML 文件中不一定都相同,我想要一个可以处理此类 Details1 的通用 XSL。如这些:

<Details1 Customer1="Customer" Total1="3" />
<Details1 Name="Jim" Age="14" Weight="180" />
<Details1 Date="2009-07-27" Range="1-5" Option1="True" />

这些不同的Details1不会出现在同一个源 XML 文件中,而是出现在不同的文件中。但是,我想在每个上使用相同的 XSL。

我在想我需要像 <xsl:value-of select="@attribute_name"/> 这样的东西但是我要为 @attribute_name 放什么呢?当我事先不知道会有什么属性时?另外,如何捕获属性名称?我想将上面的源 XML 分解为如下内容:

<Details1>
<Customer1>Customer</Customer1>
<Total1>3</Total1>
</Details1>

编辑:感谢您的回复!但是,我无法获得比以下输出更多的内容:

<?xml version="1.0" encoding="UTF-8"?>
<FlatData>
<Details1_Collection></Details1_Collection>
</FlatData>

我尝试了 lavinio 和 Jörn Horstmann 的回答,并尝试将两者结合起来。我运行这个命令:

msxsl.exe -o output.xml input.xml transform.xsl

我认为阻碍的是 namespace在输入文件中:

<Report Name="MyReport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="MyReport">

最佳答案

由于 Microsoft SQL Reporting Services 2008 命名空间是输入 XML 的一部分,因此难度有所增加。起初我没有意识到 <Report Name="MyReport" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="MyReport">是一条如此重要的线路。感谢 Pavel Minaev 的 namespace comment .以下 XSL 用于提取我想要的数据:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="EXQC005">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>

<xsl:template match="/">
<xsl:for-each select="a:Report/a:FlatData/a:Details1_Collection/a:Details1">
<xsl:element name="{name(.)}">
<xsl:for-each select="@*">
<xsl:element name="{name(.)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

我想我会尝试清理它以使用 apply-templates风格lavinio建议。也感谢Jörn Horstmann对于 select="@*" for-each 中的代码循环。弄清楚为什么 Reporting Services 报告最初与 xmlns 一起转储会很有趣。值设置为报告的名称,而不是 schema URL .

我会在完善此 XSL 时继续更新此答案。

编辑:这是一个与 namespace 无关的版本,因为对于来自 Reporting Services 的每个不同报告,显然会有不同的 namespace :

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="utf-8"/>

<xsl:template match="/">
<xsl:for-each select="*[local-name()='Report']/*[local-name()='FlatData']/*[local-name()='Details1_Collection']/*[local-name()='Details1']">
<Details>
<xsl:for-each select="@*">
<xsl:element name="{name(.)}">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</Details>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

关于xml - SSRS 报告上的 XSLT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1190734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com