Заявка на изменение XML, использующего XDocument

Добавьте универсальный параметр в свою структуру Event, а затем используйте этот тип для параметра EventValue

struct Event<T> {
    let time: Date
    var value: EventValue<T>?
}

, а затем просто инициализируйте EventValue без указания типа, поскольку компилятор позволяет передавать только значение, соответствующее ограничению общего параметра. А поскольку ваш параметр не имеет ограничений, он равен Any, поэтому вы можете передать любой тип

let event = Event(time: Date.init(), value: EventValue(value: 40.3467))
8
задан 1800 INFORMATION 22 October 2008 в 02:24
поделиться

3 ответа

За пределами записи C# кодируют для достижения этого, Вы могли использовать XSLT для преобразования XML.

1
ответ дан 5 December 2019 в 20:20
поделиться

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

public static class XElementExtensions
{
    public static void OrderElements(this XElement parent, params string[] orderedLocalNames)
    {            
        List<string> order = new List<string>(orderedLocalNames);            
        var orderedNodes = parent.Elements().OrderBy(e => order.IndexOf(e.Name.LocalName) >= 0? order.IndexOf(e.Name.LocalName): Int32.MaxValue);
        parent.ReplaceNodes(orderedNodes);
    }
}
// using the extension method before persisting xml
this.Root.Element("parentNode").OrderElements("one", "two", "three", "four");
5
ответ дан 5 December 2019 в 20:20
поделиться

Это должно добиться цели. Это заказывает дочерние узлы корня на основе их содержания, и затем изменяет их порядок в документе. Это вероятно не самый эффективный путь, но оценка по Вашим тегам, Вы хотели видеть его с LINQ.

static void Main(string[] args)
{
    XDocument doc = new XDocument(
        new XElement("root",
            new XElement("one", 1),
            new XElement("two", 2)
            ));

    var results = from XElement el in doc.Element("root").Descendants()
                  orderby el.Value descending
                  select el;

    foreach (var item in results)
        Console.WriteLine(item);

    doc.Root.ReplaceAll( results.ToArray());

    Console.WriteLine(doc);

    Console.ReadKey();
}
1
ответ дан 5 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: