gpt4 book ai didi

c# - 搜索带有 xml 命名空间前缀 C# 的 XML 元素

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

更新

我想要一个表达式(XPath 或 Regex 表达式,类似的)可以匹配具有特定命名空间的 XML 元素。例如,我想定位 link 元素的值(例如,我需要如下所示的 http://url within <b:link>http://url</b:link>)。但是, namespace 前缀因情况 1-3 中的不同 xml 文件而异。

考虑到命名空间前缀的允许字符(例如是否允许/有效任何字符),任何人都可以提供解决方案(XPath、正则表达式或类似的吗?

请注意,由于 xml 文件是未知的,因此命名空间和前缀在运行时是未知的。这是否意味着我不能使用此 XDocument/XmlDocument,因为它需要命名空间在代码中是已知的。

更新

案例一

<A xmlns:b="link">
<b:link>http://url
</b:link>
</A>

案例二

<A xmlns="link">
<link>http://url
</link>
</A>

案例三

<A xmlns:a123="link">
<a123:link>http://url
</a123:link>
</A>

请注意,链接元素中的 url 可以是任何 http url,并且在运行时之前是未知的。

更新

请标记我的问题。

最佳答案

您需要知道您将要处理的 namespace 并使用 XmlNamespaceManager 注册它们。这是一个例子:

    XmlDocument doc = new XmlDocument();
doc.LoadXml("<A xmlns:b='link'><b:Books /></A>");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("b", "link");

XmlNodeList books = doc.SelectNodes("//b:Books", nsmgr);

如果您想使用 XDocument 来完成此操作,我建议您使用 XDocument,因为它很简洁,方法如下:

    XDocument xDoc = XDocument.Parse("<A xmlns:b='link'><b:Books /></A>");
XNamespace ns = "link";
var books = xDoc.Descendants(ns + "Books");

如果您提前不知道命名空间,see this post它显示了如何仅使用本地名称在 XDocument 中进行查询。这是一个例子:

XDocument xDoc = XDocument.Parse("<A xmlns:b='link'><b:Books /></A>");
var books = xDoc.Descendants().Where(e => e.Name.LocalName.ToLower() == "books");

关于c# - 搜索带有 xml 命名空间前缀 C# 的 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996300/

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