Подтвердить что ты не робот

Преобразование XElement в XmlNode

Я знаю, что нет прямого метода делать это, но все же.. Можем ли мы преобразовать элемент XElement в XmlNode. Параметры типа InnerText и InnerXml имеют значение XmlNode.

поэтому, если я хочу использовать эти параметры, что можно сделать для преобразования XElement в XmlNode и наоборот.

4b9b3361

Ответ 1

Здесь выполняется преобразование из строки в XElement в XmlNode и обратно в XElement. ToString() в XElement похож на OuterXml на XmlNode.

    XElement xE = XElement.Parse("<Outer><Inner><Data /></Inner></Outer>");

    XmlDocument xD = new XmlDocument();
    xD.LoadXml(xE.ToString());
    XmlNode xN = xD.FirstChild;

    XElement xE2 = XElement.Parse(xN.OuterXml); 

Ответ 2

Я использую следующие методы расширения, они кажутся довольно распространенными:

public static class MyExtensions
{
    public static XElement ToXElement(this XmlNode node)
    {
        XDocument xDoc = new XDocument();
        using (XmlWriter xmlWriter = xDoc.CreateWriter())
            node.WriteTo(xmlWriter);
        return xDoc.Root;
    }

    public static XmlNode ToXmlNode(this XElement element)
    {
        using (XmlReader xmlReader = element.CreateReader())
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(xmlReader);
            return xmlDoc;
        }
    }
}

Ответ 3

На основе BrokenGlass answer, если вы хотите внедрить XmlNode в XmlDocument, используйте:

public static class MyExtensions
{
    public static XmlNode ToXmlNode(this XElement element, XmlDocument xmlDoc = null)
    {
        using (XmlReader xmlReader = element.CreateReader())
        {
            if(xmlDoc==null) xmlDoc = new XmlDocument();
            return xmlDoc.ReadNode(xmlReader);
        }
    }
}

Примечание. Если вы попытаетесь вставить в документ node, который создается другим документом, то он будет генерировать исключение: "Вставляемый node - из другого контекста документа".

Ответ 4

Я думаю, что самый короткий путь следующий:

Dim xn as XmlNode = xdoc.ReadNode(xElem.CreateReader)

Все это! Конвертировать в С# тривиально.

Ответ 6

XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;