3

我一直在使用带有内联 XML 的 XmlDataProvider。这是我的代码:

<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 具有未明确设置其 XmlNamespace (xmlns="")”的内联 XML。我知道这很明显,但为什么我会得到这个错误呢?它应该是有效的,不是吗?而且似乎没有其他人遇到这个问题,无论如何我搜索谷歌时都没有。

提前致谢

更新:为了进一步澄清,这个错误只出现在我的输出窗口中。这不是编译器错误,也不会阻止我运行我的程序。我可以很好地阅读 XML 并将其显示在 TreeView 中。我只是想了解为什么我首先会收到错误。

4

4 回答 4

1

对于它的价值,前段时间我在完全相同的 MSDN 文章中遇到了完全相同的错误(请参阅http://blog.wouldbetheologian.com/2009/07/why-wpf-databinding-is-awful-technology.html因为我对此感到不满)。但至于为什么需要它:我完全被迷惑了。它似乎不应该,因为使用 xmlns="" 并将其排除在外应该具有相同的效果。我的猜测是,它是 Microsoft 的 XAML 解析引擎(当然不完全符合 XML)的一些奇怪的工件。也许这个工件是有意的(一个功能),也许不是(一个错误)。

于 2011-04-01T20:07:22.267 回答
0

那么使用 xmlns="" 来默认命名空间是有效的

默认命名空间声明中的属性值可以为空。在声明的范围内,这与没有默认命名空间的效果相同。

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

尽管我建议您可能希望查看未声明的命名空间前缀x:

命名空间约束:前缀声明

命名空间前缀,除非它是 xml 或 xmlns,必须已经在命名空间声明属性中声明在使用前缀的元素的开始标签或祖先元素中(即,其内容中包含前缀标记的元素发生)。

于 2011-04-01T13:18:14.450 回答
0

你的例子对我有用。如果我通过使用此 XAML将它与XmlDataProvider MSDN页面的示例一起使用:

<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>

我得到这个结果:

在此处输入图像描述

于 2011-04-01T13:31:47.847 回答
0

我有同样的问题......意识到我在 XmlDataProvider 中使用,因此在标签中设置命名空间属性如下:

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

这与我的 Window 标记中的 xmlns:x 相同,因此它看起来是多余的,但可能是因为 xaml 解析器将此 XmlDataProvider 作为单独的 XML 文档处理,并且它也需要它在此文档中的命名空间?我不知道,但至少该错误不再发生。

于 2016-12-14T10:38:23.557 回答