我的 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 类中还有一些其他规范化算法,我不知道如何避免这种行为。
有什么建议吗?
最佳答案
好吧,你的问题是当你输入  
时在 XML 文档中,这在技术上与输入普通空格没有什么不同,因此 XML 解析器将其视为空格。
我建议将该行更改为
<xsl:value-of select="concat('network ',/config/areas/inside/network,' ',/config/areas/inside/subnetmask)" />
通过将空格包含在像这样的 concat 函数中,它不会作为一个节点单独存在于 XML 文档中,并且不会被误认为是不相关的空格。
与您的问题无关,但我还建议包装 XmlTextWriter
在 using block 中:
using (XmlTextWriter writer = new XmlTextWriter("config.cfg", Encoding.UTF8))
{
xslTrans.Load(xslPath);
xslTrans.Transform(xPathDoc, null, writer);
}
它会自动正确处理编写器的处理。
关于c# - Xsl 转换剪切两个 <xsl :value-of select's 之间的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6582993/