2010-11-24 82 views
5

Recibo el error Llamar a la función GetListItems pero es algo raro porque funciona en Visual Studio 2008 Express pero no en Visual Basic 2010 Express:No se puede convertir System.Xml.XmlNode en System.Xml.Linq.XElement

Dim ndQuery As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "Query", "") 

    Dim ndViewFields As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", "") 
    Dim ndQueryOptions As XmlNode = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", "") 

    ndQueryOptions.InnerXml = "<IncludeMandatoryColumns>False</IncludeMandatoryColumns>" & _ 
           "<DateInUtc>True</DateInUtc>" 

    ndViewFields.InnerXml = "<FieldRef Name=""LinkFilename"" />" & _ 
          "<FieldRef Name=""Empresa"" />" & _ 
          "<FieldRef Name=""Puesto"" />" & _ 
          "<FieldRef Name=""Fecha_x0020_Vigente"" />" & _ 
          "<FieldRef Name=""Oferta_x0020_vigente"" />" 

    ndQuery.InnerXml = "" 

    Try 

     Dim ndListItems As XmlNode = IntranetLists.GetListItems(ListUUID, Nothing, _ 
                ndQuery, ndViewFields, Nothing, ndQueryOptions, Nothing) 

y esta es la función que llama estoy:

Public Function GetListItems(ByVal listName As String, ByVal viewName As String, ByVal query As System.Xml.Linq.XElement, ByVal viewFields As System.Xml.Linq.XElement, ByVal rowLimit As String, ByVal queryOptions As System.Xml.Linq.XElement, ByVal webID As String) As System.Xml.Linq.XElement 
     Dim inValue As ListasIntranetGureak.GetListItemsRequest = New ListasIntranetGureak.GetListItemsRequest() 
     inValue.Body = New ListasIntranetGureak.GetListItemsRequestBody() 
     inValue.Body.listName = listName 
     inValue.Body.viewName = viewName 
     inValue.Body.query = query 
     inValue.Body.viewFields = viewFields 
     inValue.Body.rowLimit = rowLimit 
     inValue.Body.queryOptions = queryOptions 
     inValue.Body.webID = webID 
     Dim retVal As ListasIntranetGureak.GetListItemsResponse = CType(Me,ListasIntranetGureak.ListsSoap).GetListItems(inValue) 
     Return retVal.Body.GetListItemsResult 
    End Function 
+2

Si no funciona, por favor diga nosotros el * camino * en el que no está funcionando. Consulte http://tinyurl.com/so-hints –

+0

¿Cuál es la primera sección del código que publicó? Obviamente está incompleto. No hay forma de que pueda reproducir el problema para ver qué error está recibiendo. –

+0

En el ejemplo, convierte XElement a XmlNode; pero la pregunta le pide XmlNode a XElement ... –

Respuesta

9

no tengo VB 2008 práctico, pero a lo mejor de mi conocimiento no tiene Nunca ha habido ningún tipo de conversión automática (implícita o explícito) entre XElement y XmlNode - LINQ-to-XML es en gran parte una implementación paralela de un DOM, con solo algunas cosas (como XmlReader como fuente) en común.

Sin embargo; en términos de abordar el problema , lo mejor que puedo sugerir es trabajar con el xml; un ejemplo de C# (usando CreateReader para evitar tener que pasar a través de un string):

XElement el = new XElement("foo", 
    new XAttribute("abc","def"), new XElement("bar")); 
var doc = new XmlDocument(); 
using (var reader = el.CreateReader()) { 
    doc.Load(reader); 
} 
XmlNode node = doc.DocumentElement; // node could also be typed as XmlElement 

y para convertir de nuevo otra vez (para que coincida con el título de la pregunta):

XElement andBackAgain; 
using(var reader = new XmlNodeReader(node)) { 
    andBackAgain = XElement.Load(reader); 
} 
Cuestiones relacionadas