使用XDocument读取xaml文件

时间:2011-06-29 12:30:38

标签: xaml linq-to-xml

我有以下silverlight示例数据xaml文件,它在设计模式下工作正常:

<viewmodel:MapViewModel 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"       
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:viewmodel="clr-namespace:MyApplication.ViewModels">
<viewmodel:MapViewModel.Lines>
    <viewmodel:Line Line="M 100 100 L 280 100 S 302 102 315 115 L 500 300"/>
</viewmodel:MapViewModel.Lines></viewmodel:MapViewModel>

由于这些数据在运行时也很有用(可能永远不会),我想在后面的代码中读取xml。因此,我使用XDocument,它的工作原理,意味着我可以阅读和解析整个文档。但我无法弄清楚,如何访问元素。我可以访问“Line”吗?

我尝试的是:

            var lines = doc.Descendants(XName.Get("Line", "viewmodel:")).ToArray();

它总是什么也没有回报。由于我认为这是命名空间的问题,我试过

  • “视图模型”
  • “视图模型:”
  • “MyApplication.ViewModels”
  • “MyApplication.ViewModels:”
  • “clr-namespace:MyApplication.ViewModels”和
  • “CLR-名称空间:MyApplication.ViewModels:”

有人能告诉我我犯了什么错吗?丢失的xml-header是什么原因?我读了一个带有正确标题的xml文件(但是没有命名空间),并且它已经工作了。

1 个答案:

答案 0 :(得分:1)

使用XNamespace:

var xdoc = XDocument.Parse(xaml);
XNamespace ns = "clr-namespace:MyApplication.ViewModels";
var lines = xdoc.Descendants(ns + "Line").ToArray();

您也可以使用以下语法:

var lines = xdoc.Descendants("{clr-namespace:MyApplication.ViewModels}Line").ToArray();