XmlDataProvider имеет встроенный XML, который явно не устанавливает его XmlNamespace - PullRequest
3 голосов
/ 01 апреля 2011

Я играл с XmlDataProvider со встроенным XML.Вот мой код:

<XmlDataProvider x:Key="InternalData" XPath="/Workspace">
  <x:XData>
    <Workspace xmlns="" Name="Workspace">
      <Project Name="Project 1" />
      <Project Name="Project 2" />
      <Project Name="Project 3" />
    </Workspace>
  </x:XData>
</XmlDataProvider>

Это очень похоже на большинство примеров, которые я видел, используя встроенный XML, но я продолжаю получать ошибку "XmlDataProvider имеет встроенный XML, который явно не устанавливает свое XmlNamespace (xmlns ="")».Я знаю, это очевидно, но почему я вообще получаю эту ошибку?Это должно быть действительно, нет?И, похоже, ни у кого больше нет этой проблемы, даже если я в любом случае ищу Google.

Заранее спасибо

Обновление: Для дальнейшего уточнения эта ошибка отображается тольков моем окне вывода.Это не ошибка компилятора, и это не мешает мне запускать мою программу.Я могу хорошо прочитать XML и отобразить его в TreeView.Я просто хотел бы понять, почему я получаю ошибку в первую очередь.

Ответы [ 4 ]

1 голос
/ 02 апреля 2011

Что бы это ни стоило, некоторое время назад у меня была точно такая же ошибка, точно в той же статье MSDN (см. http://blog.wouldbetheologian.com/2009/07/why-wpf-databinding-is-awful-technology.html, где я могу об этом рассказать). Но относительно того, почему это требуется: я полностью озадачен. Не похоже, что так должно быть, так как использование xmlns = "" и его исключение должны иметь тот же эффект. Я предполагаю, что это какой-то странный артефакт механизма синтаксического анализа Microsoft XAML (который, конечно, не совсем XML-совместим). Возможно, этот артефакт предназначен (особенность), а может и нет (ошибка).

0 голосов
/ 14 декабря 2016

У меня была та же проблема ... понял, что я использовал в XmlDataProvider и, следовательно, установить свойство пространства имен в теге следующим образом:

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

Это то же самое, что и xmlns: x в моем теге Window, поэтому оно кажется избыточным, но, возможно, это связано с тем, что синтаксический анализатор xaml обрабатывает этот XmlDataProvider как отдельный документ XML, и ему также необходимо пространство имен в этом документе? Я не знаю, но, по крайней мере, ошибка больше не происходит.

0 голосов
/ 01 апреля 2011

Ваш пример работает на меня. Если я использую его на примере страницы XmlDataProvider MSDN с использованием этого XAML:

<StackPanel>
<StackPanel.Resources>
  <XmlDataProvider x:Key="InternalData" XPath="/Workspace">
  <x:XData>
    <Workspace xmlns="" Name="Workspace">
      <Project Name="Project 1" />
      <Project Name="Project 2" />
      <Project Name="Project 3" />
    </Workspace>
  </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 InternalData}" XPath="Project" />
  </ListBox.ItemsSource>

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

Я получаю этот результат:

enter image description here

0 голосов
/ 01 апреля 2011

При правильном использовании xmlns = "" пространство имен по умолчанию допустимо

Значение атрибута в объявлении пространства имен по умолчанию МОЖЕТ быть пустым. Это имеет тот же эффект в рамках объявления, что отсутствует пространство имен по умолчанию.

http://www.w3.org/TR/REC-xml-names/#defaulting

Хотя я бы посоветовал вам взглянуть на ваш необъявленный префикс пространства имен x:

Ограничение пространства имен: объявлен префикс

Префикс пространства имен, если это не xml или xmlns, ДОЛЖНЫ быть объявлены в атрибут объявления пространства имен в либо начальный тег элемента где префикс используется или в элемент предка (то есть элемент в чей контент с префиксом разметки происходит).

...