XmlDataProvider具有未显式设置其XmlNamespace的内联XML

时间:2011-04-01 13:01:39

标签: wpf xmldataprovider

我一直在玩带有内联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 个答案:

答案 0 :(得分:1)

对于它的价值,我在一段时间内就完全相同的错误,在完全相同的MSDN文章上(请参阅http://blog.wouldbetheologian.com/2009/07/why-wpf-databinding-is-awful-technology.html以了解我的内容)。但至于为什么需要它:我完全神秘化了。它似乎不应该是这样,因为使用xmlns =“”并将它留下应该具有相同的效果。我的猜测是,它是微软XAML解析引擎的一些奇怪的工件(当然这不是精确的XML兼容)。也许这个工件是(一个特征),也许不是(一个bug)。

答案 1 :(得分:0)

使用xmlns =“”来默认命名空间是有效的

  

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

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

虽然我建议您不妨查看未声明的命名空间前缀x:

  

命名空间约束:前缀已声明

     

名称空间前缀,除非它是xml   或者xmlns,必须在a中声明   名称空间声明属性   要么是元素的开始标记   使用前缀的地方或在   祖先元素(即元素中的元素)   其内容为前缀标记   发生)。

答案 2 :(得分: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>

我得到了这个结果:

enter image description here

答案 3 :(得分:0)

我有同样的问题...意识到我在XmlDataProvider中使用,因此在标记中设置了namespace属性,如下所示:

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

这与我的Window标签中的xmlns:x相同,所以它似乎是多余的,但也许它是因为xaml解析器将此XmlDataProvider作为单独的XML文档处理,它需要它#s; s这个文件中的命名空间呢?我不知道,但至少错误不会再发生了。