Не удается преобразовать System.Xml.XmlNode в System.Xml.Linq.XElement - PullRequest
6 голосов
/ 24 ноября 2010

Я получаю сообщение об ошибке Вызываю функцию GetListItems, но это немного странно, потому что она работает в Visual Studio 2008 Express, но нет в Visual Basic 2010 Express:

 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)

И это функция, которую явызов:

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

1 Ответ

9 голосов
/ 24 ноября 2010

У меня нет VB 2008 под рукой, но, насколько мне известно, никогда не было никакого автоматического преобразования (явного или явного) между XElement и XmlNode - LINQ-to- XML в значительной степени является параллельной реализацией DOM, с общими чертами (например, XmlReader в качестве источника).

Тем не менее, с точки зрения решения проблемы лучшее, что я могу предложить, - это работать с xml; пример C # (использование CreateReader, чтобы избежать необходимости использовать 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

и снова преобразовать его (для соответствия заголовку вопроса):

XElement andBackAgain;
using(var reader = new XmlNodeReader(node)) {
    andBackAgain = XElement.Load(reader);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...