Xsl变换在两个<;xsl:value-of-select';s
本文关键字:lt xsl value-of-select 两个 变换 Xsl | 更新日期: 2023-09-27 18:01:04
我的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 (XmlTextWriter writer = new XmlTextWriter("config.cfg", Encoding.UTF8))
{
xslTrans.Load(xslPath);
xslTrans.Transform(xPathDoc, null, writer);
}
它自动正确处理写入程序的处理。