#c# #xslt #xml-serialization
#c# #xslt #xml-сериализация
Вопрос:
Я работаю на C #. Я использую преобразования XSL (XSLT) версии 1.0. https://www.w3.org/TR/xslt Я использую xslt для создания xml из данных в классе MyClass MyClass соответствует шаблону и имеет свойство
List<string> Strings
Мне нужно экспортировать его таким образом:
<Line1> first string value Here </Line1>
<Line2> Second string value here </Line2>
.
.
.
Может ли кто-нибудь помочь мне понять, как это сделать?
Всего наилучшего
Комментарии:
1. Я этого не понимаю. Можете ли вы предоставить более явный образец исходного кода XML?
2. Вы говорите: «У меня есть класс для сопоставления шаблона со свойством». На каком языке программирования это? Какой процессор XSLT вы используете? Взаимодействие между XSLT и другими языками программирования во многом зависит от конкретного процессора, его API и платформы программирования.
3. @tal Я бы хотел, чтобы «новички» прочитали справку перед публикацией.
4. Почему вы хотите или должны использовать XSLT для перебора списка строк и создания XML-элементов? Это больше похоже на работу для LINQ
list.Select((item, index) => new XElement("Line" index, item))
.5. Подумайте о том, чтобы показать нам, что у вас есть в данный момент, т.Е. Покажите нам один образец класса со свойством или полем вместе с текущим XSLT, выполняющим эту работу, тогда мы получим представление о том, что вы пытаетесь сделать с этим
List<string>
свойством. Обычный ввод в XSLT — это XML, а не класс C #, поэтому нам нужно понять, где / как вы комбинируете классы C # и XSLT для создания другого XML.
Ответ №1:
Очень просто :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
List<string> Strings = new List<string>() {
"first string value Here",
"Second string value here"
};
List<XElement> output = Strings.Select((x, i) => new XElement("Line" (i 1).ToString(), x)).ToList();
}
}
}
Комментарии:
1. Спасибо за ответ. Мне нужно использовать шаблон xslt.
Ответ №2:
Я нашел решение. Может быть, есть лучший вариант… Я создал новый класс экспорта:
public class ExportString
{
[XmlElement("StringObject")]
public string StringObject{get; set;}
}
Я создал список, поскольку свойство — это MyExportClass, который соответствует XSLT:
public class MyExportClass
{
[XmlElement("LOS"]
public List<StringObject> LOS<get; set;}
}
Я использовал этот синтаксис в XSLT:
Код включает индекс в имя элемента :
<xsl:for-each select="LOS" xml:space="default">
//Get the index
<xsl:variable name ="index" select="position()"/>
<xsl:element name ="Line{$index}">
<xsl:value-of select = "StringObject"/>
</xsl:element>
//Line break
<xsl:text> amp;#xa;</xsl:text>
</xsl:for-each>
Результат:
<Line1> my first string </Line1>
<Line2> my second string </Line2>
.
.
.