c# - Xsl 转换剪切两个 <xsl :value-of select's 之间的空间

标签 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 类中还有一些其他规范化算法,我不知道如何避免这种行为。

有什么建议吗?

最佳答案

好吧,你的问题是当你输入 &#32; 时在 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/

相关文章:

javascript - C# 函数调用 cshtml

c# - 托管 .net 的 C++ 程序将对象从 C++ 公开到 C#

java - 更改colors.xml中颜色的Android文本输入布局

java - 脚轮性能问题

c# - 如何在 javascript 中编写等效于 Convert.ToBase64String() 的 javascript?

c# - 到存储库或不到存储库

java - 如何使用 Xpath java 解析带有命名空间的 xml

javascript - 从 XML 模式生成表单键

xslt - 在 xsl-fo 转换中防止不需要的空白页

xml - 如何仅计算 xslt 中值大于零的记录/节点的数量