XSLT转换不缩进正确 [英] XSLT Transform not indenting properly

查看:143
本文介绍了XSLT转换不缩进正确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面是一个XSLT:

<xsl:stylesheet version="1.0" xmlns:P="http://abc.com/Xyz.xsd" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="Thing">
        <xsl:element name="div">
            <xsl:attribute name="class">
                <xsl:text>Field</xsl:text>
            </xsl:attribute>

            <xsl:element name="span">
                <xsl:attribute name="class">
                    <xsl:text>Label</xsl:text>
                </xsl:attribute>

                <xsl:value-of select="$displayName"/>
                <xsl:text>:</xsl:text>
            </xsl:element>
            <xsl:element name="span">
                <xsl:attribute name="class">
                    <xsl:text>Input</xsl:text>
                </xsl:attribute>
            </xsl:element>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>

下面是XSLT转换的输出:

Here is the output of the XSLT Transformation:

<div class="Field"><span class="Label">Name:</span><span class="Input"></span></div>

下面是如何我做了转换:

Here is how I'm doing the transformation:

XslCompiledTransform xslTransform = new XslCompiledTransform();

xslTransform.Load(xsltPath, new XsltSettings(true, true), new XmlUrlResolver());

using (FileStream outputStream = File.Create(outputPath))
{
    using (StringReader stringReader = new StringReader(xml))
    {
        using (XmlReader xmlReader = XmlReader.Create(stringReader))
        {
            xslTransform.Transform(xmlReader, outputStream);
        }
    }
}

为什么格式不缩进?后来在输出中,有些事情是缩进。不知道为什么。我正在寻找一个解决方案,将采用这一格式设置在XSLT规定。这code是用来写任何格式(XML,HTML,文本等),所以我不想具体code,将只处理XML,例如。但是,如果我的XSLT对XML的输出,并设置为缩进,那么就应该得到尊重。

Why is the format not indented? Later on in the output, some things are indented. Not sure why. I'm looking for a solution that will honor the format settings as specified in the XSLT. This code is used to write to any format (XML, HTML, text, etc.) so I don't want specific code that will only work with XML, for example. But if my XSLT has an output of XML and is set to indent, then that should be honored.

推荐答案

在默认情况下的XmlWriter (在这里是被隐式使用 XslCompiledTransform )不缩进你的XML,并且不会自动使用speicifed在XSLT的设置。

By default XmlWriter (which here is being used implicitly by XslCompiledTransform) does not indent your xml, and won't automatically use the settings speicifed in your xslt.

你可以明确地提供设置到的XmlWriter 指定的输出可以缩进,或者更好的办法是有的XmlWriter 使用由XSLT提供的设置:

You can either explicitly supply settings to an XmlWriter that specify that the output can be indented, or the better approach is to have XmlWriter use the settings supplied by the xslt:

XslCompiledTransform xslTransform = new XslCompiledTransform();
xslTransform.Load(xsltPath, new XsltSettings(true, true), new XmlUrlResolver());

using (XmlWriter writer = XmlWriter.Create(outputPath, xslTransform.OutputSettings))
{
    using (StringReader stringReader = new StringReader(xml))
    {
        using (XmlReader xmlReader = XmlReader.Create(stringReader))
        {
            xslTransform.Transform(xmlReader, writer);
        }
    }
}

这篇关于XSLT转换不缩进正确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆