gpt4 book ai didi

c# - 如何使用 C# 从 XML 中删除所有 namespace ?

转载 作者:IT王子 更新时间:2023-10-29 03:36:01 24 4
gpt4 key购买 nike

我正在寻找从所有 XML 元素中删除 namespace 的干净、优雅和智能的解决方案?这样做的功能会是什么样子?

定义接口(interface):

public interface IXMLUtils
{
string RemoveAllNamespaces(string xmlDocument);
}

从中删除 NS 的示例 XML:

<?xml version="1.0" encoding="utf-16"?>
<ArrayOfInserts xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<insert>
<offer xmlns="http://schema.peters.com/doc_353/1/Types">0174587</offer>
<type2 xmlns="http://schema.peters.com/doc_353/1/Types">014717</type2>
<supplier xmlns="http://schema.peters.com/doc_353/1/Types">019172</supplier>
<id_frame xmlns="http://schema.peters.com/doc_353/1/Types" />
<type3 xmlns="http://schema.peters.com/doc_353/1/Types">
<type2 />
<main>false</main>
</type3>
<status xmlns="http://schema.peters.com/doc_353/1/Types">Some state</status>
</insert>
</ArrayOfInserts>

调用 RemoveAllNamespaces(xmlWithLotOfNs) 后,我们应该得到:

  <?xml version="1.0" encoding="utf-16"?>
<ArrayOfInserts>
<insert>
<offer >0174587</offer>
<type2 >014717</type2>
<supplier >019172</supplier>
<id_frame />
<type3 >
<type2 />
<main>false</main>
</type3>
<status >Some state</status>
</insert>
</ArrayOfInserts>

解决方案的首选语言是 .NET 3.5 SP1 上的 C#。

最佳答案

好吧,这是最终的答案。我使用了很棒的 Jimmy idea(不幸的是它本身并不完整)和完整的递归函数来正常工作。

基于接口(interface):

string RemoveAllNamespaces(string xmlDocument);

我在这里展示了用于删除 XML namespace 的最终干净且通用的 C# 解决方案:

//Implemented based on interface, not part of algorithm
public static string RemoveAllNamespaces(string xmlDocument)
{
XElement xmlDocumentWithoutNs = RemoveAllNamespaces(XElement.Parse(xmlDocument));

return xmlDocumentWithoutNs.ToString();
}

//Core recursion function
private static XElement RemoveAllNamespaces(XElement xmlDocument)
{
if (!xmlDocument.HasElements)
{
XElement xElement = new XElement(xmlDocument.Name.LocalName);
xElement.Value = xmlDocument.Value;

foreach (XAttribute attribute in xmlDocument.Attributes())
xElement.Add(attribute);

return xElement;
}
return new XElement(xmlDocument.Name.LocalName, xmlDocument.Elements().Select(el => RemoveAllNamespaces(el)));
}

它 100% 有效,但我没有对其进行太多测试,因此它可能无法涵盖某些特殊情况......但它是一个很好的起点。

关于c# - 如何使用 C# 从 XML 中删除所有 namespace ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/987135/

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