gpt4 book ai didi

c# - 使用 XElement 查询命名空间中的节点

转载 作者:太空狗 更新时间:2023-10-29 20:00:33 25 4
gpt4 key购买 nike

我正在尝试从看起来像这样的 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>

这惨败了:

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);

有人有什么想法吗?

谢谢。

最佳答案

您真的要为此使用 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");

或者如果您完全相信每个 RegisterForComInterop 都有一个合适的 bool 值,您可以使用 explicit XElement to bool conversion :

XDocument cpo = XDocument.Load(file);
XNamespace x = "http://schemas.microsoft.com/developer/msbuild/2003";
var elements = cpo.Descendants(x + "RegisterForComInterop")
.Where(x => (bool) x);

就我个人而言,如果涉及到命名空间,我通常会选择这条路线而不是 XPath 尤其是

关于c# - 使用 XElement 查询命名空间中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4857172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com