سؤال

وأنا أحاول ربط سيلفرلايت DataGrid إلى نتائج مكالمة خدمة WCF. لم أكن رؤية البيانات المعروضة في الشبكة، وذلك عندما ركضت من خلال المصحح، وألاحظ أن XDocument.Descendants () لم يرجع أي عناصر حتى عندما كان يمر في اسم عنصر صالح. هنا هو XML التي يتم تمريرها مرة أخرى من الخدمة:

<ArrayOfEmployee xmlns="http://schemas.datacontract.org/2004/07/Employees.Entities" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <Employee>
    <BirthDate>1953-09-02T00:00:00</BirthDate>
    <EmployeeNumber>10001</EmployeeNumber>
    <FirstName>Georgi</FirstName>
    <Gender>M</Gender>
    <HireDate>1986-06-26T00:00:00</HireDate>
    <LastName>Facello</LastName>
  </Employee>
  <Employee>
    <BirthDate>1964-06-02T00:00:00</BirthDate>
    <EmployeeNumber>10002</EmployeeNumber>
    <FirstName>Bezalel</FirstName>
    <Gender>F</Gender>
    <HireDate>1985-11-21T00:00:00</HireDate>
    <LastName>Simmel</LastName>
  </Employee>
</ArrayOfEmployee>

وهنا هو طريقة استخدامها لتحميل النتائج في مجموعة من الكائنات مجهولة، وذلك باستخدام LINQ إلى XML، ومن ثم ربط مجموعة إلى الشبكة.

void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs args)
{
    if (args.Error != null) return;
    var xml = XDocument.Parse(args.Result);
    var employees = from e in xml.Descendants("Employee")
                    select new
                    {
                        EmployeeNumber = e.Element("EmployeeNumber").Value,
                        FirstName = e.Element("FirstName").Value,
                        LastName = e.Element("LastName").Value,
                        Birthday = e.Element("BirthDate").Value
                    };
    DataGrid.SelectedIndex = -1;
    DataGrid.ItemsSource = employees;
}

وأي فكرة لماذا xml.Descendants("Employee") لا يرجع أي شيء؟

وشكرا!

هل كانت مفيدة؟

المحلول

وهو في الواقع تحويلها المعلمة السلسلة التي تم تمريرها إلى أحفاد ضمنيا إلى كائن ل Xname. يمثل ل Xname اسم عنصر مؤهل بشكل كامل.

وتحدد الوثيقة مساحة اسم "أنا"، لذلك أعتقد أنك بحاجة إلى استخدام اسم مؤهل بشكل كامل لموظف الوصول. بمعنى آخر. الأول: الموظف، حيث البادئة "الأول: يحل في الواقع إلى سلسلة مساحة الاسم الكامل

.

هل حاولت شيئا مثل:

XName qualifiedName = XName.Get("Employee", "http://www.w3.org/2001/XMLSchema-instance");

var employees = from e in xml.Descendants(qualifiedName)

...

نصائح أخرى

وأنت لا تشمل مساحة الاسم من العنصر الأصلي:

XNameSpace ns = "http://schemas.datacontract.org/2004/07/Employees.Entities";
foreach (XElement element in xdoc.Descendants(ns + "Employee")
{
    ...
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top