我有以下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();
它总是什么也没有回报。由于我认为这是命名空间的问题,我试过
有人能告诉我我犯了什么错吗?丢失的xml-header是什么原因?我读了一个带有正确标题的xml文件(但是没有命名空间),并且它已经工作了。
答案 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();