pus*_* 22 8 c# xelement namespaces
我试图从一个看起来像这样的csproj文件中提取一个节点,但是无法让它工作 - 大概是因为名称空间声明.
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
<PropertyGroup>
<RegisterForComInterop>true</RegisterForComInterop>
Run Code Online (Sandbox Code Playgroud)
这失败了:
XDocument cpo = XDocument.Load(file);
XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable());
nsm.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/200");
IEnumerable<XElement> list3 = cpo.XPathSelectElements("//x:RegisterForComInterop[.='true']", nsm);
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?
谢谢.
Jon*_*eet 16
你真的想用XPath吗?在LINQ to XML中使用名称空间非常简单:
XDocument cpo = XDocument.Load(file);
XNamespace x = "http://schemas.microsoft.com/developer/msbuild/2003";
var elements = cpo.Descendants(x + "RegisterForComInterop")
.Where(x => (string) x == "true");
Run Code Online (Sandbox Code Playgroud)
或者如果你绝对相信,每一个RegisterForComInterop将有你可以使用适当的布尔值明确XElement到bool转换:
XDocument cpo = XDocument.Load(file);
XNamespace x = "http://schemas.microsoft.com/developer/msbuild/2003";
var elements = cpo.Descendants(x + "RegisterForComInterop")
.Where(x => (bool) x);
Run Code Online (Sandbox Code Playgroud)
就个人而言,我通常会走这条路而不是XPath,尤其是涉及名称空间时.