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 があります」というエラーが表示され続けます。明らかなことはわかっていますが、なぜこのエラーが発生するのでしょうか? それは有効なはずですよね?とにかく私がGoogleを検索したときではなく、他の誰もこの問題を抱えているようには見えません.

前もって感謝します

更新:さらに明確にするために、このエラーは出力ウィンドウにのみ表示されます。これはコンパイラ エラーではなく、プログラムの実行を妨げません。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

あなたの例は私にとってうまくいきます。この 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

xmlns="" を使用して名前空間をデフォルトにすることは有効です

デフォルトの名前空間宣言の属性値は空である場合があります。これは、宣言の範囲内で、デフォルトの名前空間がない場合と同じ効果があります。

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

宣言されていない名前空間プレフィックスを確認することをお勧めしますがx:

名前空間の制約: 宣言されたプレフィックス

名前空間接頭辞は、それが xml または xmlns でない限り、接頭辞が使用される要素の開始タグまたは祖先要素 (つまり、接頭辞付きのマークアップがコンテンツに含まれる要素) のいずれかで、名前空間宣言属性で宣言されている必要があります。発生します)。

于 2011-04-01T13:18:14.450 に答える