我有以下代码
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},' ',''). The '(' character, hex 0x28, cannot be included in name.
<xsl:preserve-space elements="*" /> - Does not help either.
请帮助。
答案 0 :(得分:0)
使用翻译功能:<xsl:value-of select="translate(element,' ','')" />
。
这只是将任何空格转换为空字符串。翻译有点像文本替换,但它只适用于单个字符,可用于转换大小写,或者删除单个字符的出现。