C# - 如何在XSLT中创建新元素时删除空格

时间:2011-08-04 07:02:00

标签: c# xml xslt

我有以下代码

string xml = @"<root>
    <element>Field A</element>
</root>";

string xsl = @"<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>
<xsl:template match='root'>
     <root>
         <xsl:variable name='fieldname'>
             <xsl:value-of select='element' />
         </xsl:variable>
             <xsl:element name='{$fieldname}'></xsl:element>
     </root>
</xsl:template>
</xsl:stylesheet>";

XDocument newTree = new XDocument();

using (XmlWriter writer = XmlWriter.Create(newTree.CreateWriter()))
{    
        XslCompiledTransform xslt = new XslCompiledTransform();            
        xslt.Load(XmlReader.Create(new StringReader(xsl)));
        xslt.Transform(XDocument.Parse(xml).CreateReader(), writer);
}
Console.WriteLine(newTree);

之后我想拥有这样的xml

<root>
   <FieldA />
</root>

相反,我收到此错误:''字符,十六进制值0x20,不能包含在名称中。 看起来我需要在创建新元素之前删除空格'Field A'到'FieldA'。 尝试了替换的不同变体:

replace({@fieldname}, ' ', ''). error: XSLT compile error, Name cannot begin with ''' character, hex 0x27, cannot be included in name.

replace({$fieldname},&apos; &apos;,&apos;&apos;). The '(' character, hex 0x28, cannot be included in name.

<xsl:preserve-space elements="*" /> - Does not help either.

请帮助。

1 个答案:

答案 0 :(得分:0)

使用翻译功能:<xsl:value-of select="translate(element,' ','')" />

这只是将任何空格转换为空字符串。翻译有点像文本替换,但它只适用于单个字符,可用于转换大小写,或者删除单个字符的出现。