Xsl转换削减了两者之间的空间

时间:2011-07-05 12:56:35

标签: c# xml xslt

我的xsl文件中有以下行:

   network <xsl:value-of select="/config/areas/inside/network"/>&#32;<xsl:value-of select="/config/areas/inside/subnetmask"/>

我在C#中的转换代码:

        XPathDocument xPathDoc = new XPathDocument(xmlPath);
        //XslTransform xslTrans = new XslTransform(); -> Deprecated!
        XslCompiledTransform xslTrans = new XslCompiledTransform();

        XmlTextWriter writer = new XmlTextWriter("config.cfg", Encoding.UTF8);

        xslTrans.Load(xslPath);

        xslTrans.Transform(xPathDoc, null, writer);

        writer.Close();

对于已弃用的版本,一切正常(在我为两个元素之间的空格放置ASCII代码之后),但XslCompiledTransform类中还有一些其他的规范化算法,我不知道如何避免这种行为。 / p>

有什么建议吗?

1 个答案:

答案 0 :(得分:4)

好的,你的问题在于,当你将&#32;放在XML文档中时,这在技术上与输入普通空间没什么不同,因此XML解析器将其视为空格。

我建议将该行更改为

<xsl:value-of select="concat('network ',/config/areas/inside/network,' ',/config/areas/inside/subnetmask)" />

通过将空间封闭在这样的concat函数中,它不会作为自身的节点位于XML文档中,也不会被误认为是无关的空格。

与您的问题无关,但我还建议将XmlTextWriter包装在使用区块中:

using (XmlTextWriter writer = new XmlTextWriter("config.cfg", Encoding.UTF8))
{
    xslTrans.Load(xslPath);
    xslTrans.Transform(xPathDoc, null, writer);
}

它会自动正确处理编写器。