Как удалить пробелы при создании нового элемента в XSLT - PullRequest
1 голос
/ 04 августа 2011

У меня есть следующий код

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.

Помогите пожалуйста.

1 Ответ

0 голосов
/ 04 августа 2011

Используйте функцию перевода: <xsl:value-of select="translate(element,' ','')" />.

Это просто переводит все пробелы в пустую строку.Перевести немного похоже на замену текста, но оно работает только для отдельных символов, полезно для преобразования регистра или удаления вхождений одного символа, подобного этому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...