2011-08-04 56 views
1

我有下面的代碼C# - 如何刪除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,不能包含在名稱中。 看起來我需要在創建新元素之前將空格'字段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. 

請幫忙。

回答

0

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

這只是將任何空格轉換爲空字符串。翻譯有點像文本替換,但它僅適用於單個字符,可用於轉換大小寫,或者剝離單個字符的出現。

+0

仍然收到此錯誤:XSLT編譯錯誤。名稱不能以字符'''開頭,十六進制值爲0x27。 –

+0

對不起,我的不好;我通常將我的選擇放在「」中的字符串文字中,我偶然使用了「」。我已經解決了答案。 – Flynn1179

+0

非常感謝。翻譯作品。這是我的最終字符串的樣子。 string xsltPiece =「」 –