我的xsl文件中有以下行:
network <xsl:value-of select="/config/areas/inside/network"/> <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>
有什么建议吗?
答案 0 :(得分:4)
好的,你的问题在于,当你将 
放在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);
}
它会自动正确处理编写器。