2010-10-20 4 views
0

Мне нравится извлекать данные из xml-файла с помощью linq. Я проверил множество примеров, все примеры показывают извлеченный элемент в форме XElement, но извлекаются в виде XMLNode. возможно ли это сделать так, как я могу преобразовать XElement в xmlnode, как я могу это сделать. Мне нужно это в XMLBound Element, а не в XMLDocment.Как получить из xmldocment как узел xml с помощью linq

ответ

1

Вы можете написать расширение для linq.

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

Поскольку у вас есть XElement, вы можете преобразовать его. (blog post)

element.GetXmlNode(); 

Надеется, что это помогает
Myra

0

Следующего метод будет конвертировать любой XNode в XmlNode

XmlDocument doc = new XmlDocument(); //cached as a member variable for performance. 
//recreating it inside ToXmlNode works fine too. 

XmlNode ToXmlNode(XNode xnode) { 
    using(var reader = myElem.CreateReader()) 
     return doc.ReadNode(reader); 
} 

Это означает, что он будет поддерживать целые документы, отдельные элементы, текстовые узлы, комментарии, инструкции по обработке - большинство вещей, кроме XAttribute.

Однако это то, чего вам следует избегать. Попытайтесь использовать либо новый API System.Xml.Linq, чтобы не смешивать его с API-интерфейсом XmlDocument. С этим новым API легче работать, и в любом случае смешивание таких API, как это, делает более сложный код. Если вы должны смешивать API, возможно, более чистым будет преобразовать весь документ в один, а не копировать отдельные узлы туда и обратно, особенно если ваша структура данных изменена.

Однако, если вам просто нужен быстрый переход, приведенное выше будет работать нормально и разумно эффективно.

Смежные вопросы