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

Лучший способ обратиться к IE только условные комментарии . Вы не должны даже использовать JavaScript. Посмотрите, например http://www.positioniseverything.net/articles/ie7-dehacker.html .

23
задан Sangram Nandkhile 11 February 2013 в 07:12
поделиться

6 ответов

Здесь происходит преобразование строки в 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); 
26
ответ дан 29 November 2019 в 00:43
поделиться

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

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;
        }
    }
}
52
ответ дан 29 November 2019 в 00:43
поделиться

На основании ответа BrokenGlass , если вы хотите встроить 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);
        }
    }
}

Примечание: если вы пытаетесь вставить в документ узел, который создается другим документом, чем создает исключение: «Узел, который нужно вставить, находится в другом контексте документа».

3
ответ дан 29 November 2019 в 00:43
поделиться

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

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

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

2
ответ дан 29 November 2019 в 00:43
поделиться

Есть способы получить InnerXml из XElement - см. Лучший способ получить InnerXml из XElement?

1
ответ дан 29 November 2019 в 00:43
поделиться
XElement xelement = GetXElement();
XmlNode node = new XmlDocument().ReadNode(xelement.CreateReader()) as XmlNode;
1
ответ дан 29 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

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