كيفية القيام بما يلي: ربط بيانات XML باستخدام XMLDataProvider واستعلامات XPath

يوضح هذا المثال كيفية الربط إلى بيانات XML باستخدام XmlDataProvider.

بــ XmlDataProvider ، البيانات الأساسية التي يمكن الوصول إليها من خلال ربط البيانات في التطبيق الخاص بك يمكن ان تكون أية شجرة من عقد XML . بمعنى آخر، XmlDataProvider يوفر طريقة ملائمة لاستخدام أية شجرة من عقد XML كـ مصدر الربط .

مثال

في المثال التالي، يتم تضمين البيانات مباشرة كـ XML  جزيرة بيانات داخل مقطع Resources. جزيرة البيانات XML يجب أن يكون ملتفة في علامات <x:XData> ويكون لها دائماً عقدة جذر واحد و الذي هو الجرد في هذا المثال.

ملاحظةملاحظة

عقدة جذر لبيانات XML لديها سمة xmlns التي تقوم بتعيين مساحة الاسم XML إلى سلسلة فارغة.هذة متطلبات من أجل تطبيق استعلامات XPath لجزيرة البيانات التي هي مضمنة داخل صفحة XAML .في هذه الحالة المضمنة ، XAML ، وبالتالي ترث جزيرة البيانات مساحة الاسم System.Windows .وبسبب هذا، تحتاج إلى تعيين مساحة الاسم الفارغة للاحتفاظ باستعلامات XPath من أن يتم تأهيلها بواسطة مساحة الاسم System.Windows التي ستقوم بالتوجية الخاطيء للاستعلامات.

<StackPanel
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  Background="Cornsilk">

  <StackPanel.Resources>
    <XmlDataProvider x:Key="InventoryData" XPath="Inventory/Books">
      <x:XData>
        <Inventory >
          <Books>
            <Book ISBN="0-7356-0562-9" Stock="in" Number="9">
              <Title>XML in Action</Title>
              <Summary>XML Web Technology</Summary>
            </Book>
            <Book ISBN="0-7356-1370-2" Stock="in" Number="8">
              <Title>Programming Microsoft Windows With C#</Title>
              <Summary>C# Programming using the .NET Framework</Summary>
            </Book>
            <Book ISBN="0-7356-1288-9" Stock="out" Number="7">
              <Title>Inside C#</Title>
              <Summary>C# Language Programming</Summary>
            </Book>
            <Book ISBN="0-7356-1377-X" Stock="in" Number="5">
              <Title>Introducing Microsoft .NET</Title>
              <Summary>Overview of .NET Technology</Summary>
            </Book>
            <Book ISBN="0-7356-1448-2" Stock="out" Number="4">
              <Title>Microsoft C# Language Specifications</Title>
              <Summary>The C# language definition</Summary>
            </Book>
          </Books>
          <CDs>
            <CD Stock="in" Number="3">
              <Title>Classical Collection</Title>
              <Summary>Classical Music</Summary>
            </CD>
            <CD Stock="out" Number="9">
              <Title>Jazz Collection</Title>
              <Summary>Jazz Music</Summary>
            </CD>
          </CDs>
        </Inventory>
      </x:XData>
    </XmlDataProvider>
  </StackPanel.Resources>

  <TextBlock FontSize="18" FontWeight="Bold" Margin="10"
    HorizontalAlignment="Center">XML Data Source Sample</TextBlock>
  <ListBox
    Width="400" Height="300" Background="Honeydew">
    <ListBox.ItemsSource>
      <Binding Source="{StaticResource InventoryData}"
               XPath="*[@Stock='out'] | *[@Number>=8 or @Number=3]"/>
    </ListBox.ItemsSource>

    <!--Alternatively, you can do the following. -->
    <!--<ListBox Width="400" Height="300" Background="Honeydew"
      ItemsSource="{Binding Source={StaticResource InventoryData},
      XPath=*[@Stock\=\'out\'] | *[@Number>\=8 or @Number\=3]}">-->

    <ListBox.ItemTemplate>
      <DataTemplate>
        <TextBlock FontSize="12" Foreground="Red">
          <TextBlock.Text>
            <Binding XPath="Title"/>
          </TextBlock.Text>
        </TextBlock>
      </DataTemplate>
    </ListBox.ItemTemplate>
  </ListBox>
</StackPanel>

كما هو موضح في هذا المثال ، لإنشاء تعريف الربط نفسه في بناء جملة السمة ، يجب عليك الهروب من الأحرف الخاصة بشكل صحيح. لمزيد من المعلومات، راجع الوحدات حرف XML و XAML.

ListBox ستظهر العناصر التالية عندما يتم تشغيل هذا المثال. هذه هي s عنوانلكافة العناصر الموجودة ضمن الكتب باستخدام أما Sإلىck القيمة " خارج " أو القيمة رقم 3 أو أكبر من أو يساوي إلى 8. إشعار التي يتم إرجاعها لا يوجد عناصر القرص المضغوط لأن XPathالقيمة التعيين تشغيل XmlDataProviderيشير فقط يجب أن يتعرض عناصر الكتب (عامل تصفية إعداد بشكل أساسي).

مثال لـ XPath

في هذا المثال، عناوين الكتاب يتم عرضها لأن XPath من ربط TextBlock في DataTemplate يتم تعيينه إلى " عنوان". إذا كنت تريد عرض قيمة سمة مثل ISBN ، يجب عليك تعيين تلك القيمة XPath إلى "@ISBN".

الخصائص XPath في WPF تتم معالجتها بواسطة أسلوب XmlNode.SelectNodes. يمكنك تعديل الاستعلامات XPath للحصول على نتائج مختلفة. فيما يلي بعض الأمثلة عن استعلام XPath على الحد ListBox من المثال السابق:

  • XPath="Book[1]" سيقوم بإرجاع أول عنصر دفتر ("XML في إجراء"). لاحظ اعتماد فهارس XPath على 1 ، ليس 0.

  • XPath="Book[@*]" يقوم بإرجاع كافة عناصر الكتاب مع أية سمات.

  • XPath="Book[last()-1]" سيقوم بإرجاع الثاني إلى عنصر الكتاب الأخير ("تعريف Microsoft .NET").

  • XPath="*[position()>3]" سيقوم بإرجاع كافة عناصر الكتاب عدا 3 الأولى .

عند تشغيل استعلام XPath ، تقوم بإرجاع XmlNodeأو قائمة XmlNodes. XmlNodeهووقت تشغيل اللغة العامة (CLR)الكائن، الذي يعني أنه يمكنك استخدامPathخاصية إلى يربط إلىوقت تشغيل اللغة العامة (CLR)خصائص. خذ بعين الاعتبار المثال السابق مرة أخرى. إذا كان باقي المثال يبقى نفسه وقمت بتغيير ربط TextBlock إلى التالي ، سترى أسماء XmlNodes التي تم إرجاعها في ListBox. في هذه الحالة، اسم كافة العقد التي تم إرجاعها هو " الكتاب".

<TextBlock FontSize="12" Foreground="Red">
  <TextBlock.Text>
    <Binding Path="Name"/>
  </TextBlock.Text>
</TextBlock>

في بعض التطبيقات ، تضمين XML كجزيرة بيانات داخل مصدر صفحة XAML يمكن أن تكون غير ملائمة لأن المحتوى المظبوط للبيانات يجب أن يكون معروفاً في وقت التحويل البرمجي. لذلك، الحصول على بيانات من ملف XML خارجي أيضاً يتم دعمها ، كما في المثال التالي:

<XmlDataProvider x:Key="BookData" Source="data\bookdata.xml" XPath="Books"/>

إذا كانت بيانات XML موجودة في ملف XML البعيد،تقوم بتعريف الوصول إلى البيانات عن طريق تعيين سمة URL صواب Source المناسبة كما يلي:

<XmlDataProvider x:Key="BookData" Source="http://MyUrl" XPath="Books"/>

راجع أيضًا:

المهام

كيفية القيام بما يلي: ربط XDocument ، XElement أو LINQ للحصول على نتائج استعلام XML

كيفية القيام بما يلي: استخدام نمط رئيسي تفصيلي مع بيانات ذات التسلسل الهرمي XML

المرجع

ObjectDataProvider

المبادئ

نظرة عامة حول مصادر الربط

نظرة عامة لربط البيانات

موارد أخرى

المواضيع الإجرائية لربط البيانات