【问题标题】:XML to XML with XSLT using Visual Studio使用 Visual Studio 使用 XSLT 将 XML 转换为 XML
【发布时间】:2017-09-07 09:05:07
【问题描述】:

我正在尝试使用 XSLT 修改 XML 文件的结构。 以下是输入的 XML:-

<?xml version="1.0" encoding="utf-8"?>
<Report xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <table1>
        <Detail_Collection>
            <Details ID="1   " Type="4"  />
            <Details ID="2   " Type="5"  />
        </Detail_Collection>
    </table1>
</Report>

这是我创建的 XSLT 文件,但它没有从输入 XML 中获取值。

<?xml version="1.0" encoding="utf-8"?>
<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" />

    <xsl:template match="/">
        <html>
            <body>
                <h2>TEST</h2>
                <table border="1">
                    <tr bgcolor="#9acd32">
                        <th>ID</th>
                        <th>Type</th>
                    </tr>
                    <xsl:for-each select="Report/table1/Detail_Collection/Details">
                        <tr>
                            <td>
                                <xsl:value-of select="ID"/>
                            </td>
                            <td>
                                <xsl:value-of select="Type"/>
                            </td>
                         </tr>
                    </xsl:for-each>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>   

问题是没有发现任何价值,我无法理解问题所在。似乎输入 XML 没有与 XSLT 链接。解决此问题后,我应该能够完成我的任务,因为我认为我掌握了 XSLT 元素的基础知识(例如,for-each、value-of、sort 等)但是由于我是 XSLT 的新手,我发现很难将 XML 连接/输入到 XSLT。

【问题讨论】:

    标签: c# xml visual-studio xslt reporting-services


    【解决方案1】:

    首先,您的 XML 中有一个 table1 元素在您的 xsl:for-each 选择中遗漏了。它应该看起来像这样......

    <xsl:for-each select="Report/table1/Detail_Collection/Details">
    

    其次,您正在使用&lt;xsl:value-of select="ID"/&gt; 来获取详细信息的值,但ID 是您的XML 中的一个属性,因此您确实需要使用@ 符号来表示这一点

    <xsl:value-of select="@ID"/>
    

    试试这个 XSLT

    <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="html" indent="yes" encoding="utf-8" />
    
        <xsl:template match="/">
            <html>
                <body>
                    <h2>TEST</h2>
                    <table border="1">
                        <tr bgcolor="#9acd32">
                            <th>ID</th>
                            <th>Type</th>
                        </tr>
                        <xsl:for-each select="Report/table1/Detail_Collection/Details">
                            <tr>
                                <td>
                                    <xsl:value-of select="@ID"/>
                                </td>
                                <td>
                                    <xsl:value-of select="@Type"/>
                                </td>
                             </tr>
                        </xsl:for-each>
                    </table>
                </body>
            </html>
        </xsl:template>
    </xsl:stylesheet>  
    

    【讨论】:

    • 谢谢,这很好。如果所需的 XML 输出结构类似于以下内容,您如何获取这些值:- 。如果我将 放在双引号之间,它将不起作用。
    • 这里需要使用“属性值模板”。你会做类似&lt;Details ID="{@ID}" /&gt; 的事情。注意大括号的使用。
    • 谢谢蒂姆。这对我来说是一个很好的开始,我在需要完成的任务上取得了很大进展。我现在能够将 XML 格式化为 XML。我现在需要弄清楚如何在 .rdl 项目中单击导出按钮和“带有报告数据的 XML 文件”时直接从 Reporting Service 项目中包含验证(使用 XSD)并最终获得输出 XML。做如果您知道如何完成此操作的任何好的来源或指南,请告诉我。再次感谢。
    猜你喜欢
    • 2016-08-24
    • 1970-01-01
    • 2019-12-05
    • 2019-04-11
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多