gpt4 book ai didi

c# - 如何使用命名空间获取 XML 中节点的值,如果找不到节点则不抛出异常?

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:38 25 4
gpt4 key购买 nike

我正在使用 LinqToXml 获取名称为 GUID 的注释值.所以 XML 看起来像这样:

<xml>
<node1>
<GUID>123948390</GUID>
</node1>
<xml>

也可以嵌套到更多的节点中。每个可能的 XML 字符串只有一个 GUID。

我想做的是解析 XML 以收集 GUID 元素。我正在解析的 XML 可能包含也可能不包含 GUID 元素。如果它不包含 GUID 元素,我希望它返回一个空字符串。

我尝试的是:

 doc.Elements().Where(e => e.Name.LocalName == "GUID").Single().Value;

其中 doc 是 XDocument ,但这并没有找到值,如果没有找到则抛出异常。如何获取 GUID 元素的值并确保在未找到任何内容时不抛出异常?

/编辑

  var doc = XDocument.Parse(xmlString);
this.RequestId = (string)doc.Descendants("GUID").SingleOrDefault() ??
String.Empty;

总是返回一个空字符串。即使有 GUID。

xmlString 如下所示:<?xml version=\"1.0\" encoding=\"utf-8\"?><MethodName xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\><GUID>blabla</GUID></Meth‌odName> .

最佳答案

如果您想搜索所有文档,您应该使用Descendants。如果文档中没有这样的元素,您可以将元素转换为字符串以获取其值而不会出现 NullReferenceException:

var guid = (string)doc.Descendants("GUID").SingleOrDefault() ?? String.Empty;

或者

var guid = doc.Descendants("GUID")
.Select(g => (string)g)
.SingleOrDefault(String.Empty);

或者用 XPath

var guid = (string)doc.XPathSelectElement("//GUID") ?? String.Empty;

注意:如果您在真实的 xml 文档中定义了默认的 xml 命名空间,那么您应该提供命名空间以获取元素名称:

var ns = doc.Root.GetDefaultNamespace();
var guid = (string)doc.Descendants(ns + "GUID").SingleOrDefault() ?? "";

关于c# - 如何使用命名空间获取 XML 中节点的值,如果找不到节点则不抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22042640/

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