gpt4 book ai didi

c# - 将命名空间添加到 xml 文件

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

我有一个 xml 文件,我想在其中添加预定义的名称规范。以下是代码:

private const string uri = "http://www.w3.org/TR/html4/";
private static readonly List<string> namespaces = new List<string> { "lun" };

public static XElement AddNameSpaceAndLoadXml(string xmlFile) {
var nameSpaceManager = new XmlNamespaceManager(new NameTable());
// add custom namespace to the manager and take the prefix from the collection
namespaces.ToList().ForEach(name => {
nameSpaceManager.AddNamespace(name, string.Concat(uri, name));
});

XmlParserContext parserContext = new XmlParserContext(null, nameSpaceManager, null, XmlSpace.Default);
using (var reader = XmlReader.Create(@xmlFile, null, parserContext)) {
return XElement.Load(reader);
}
}

问题是内存中生成的 xml 没有显示添加的正确命名空间。此外,它们不会添加到根目录中,而是添加到标签旁边。下面添加了xml。在 xml 中显示 p3:read_data 而应该是 lun:read_data

我如何才能在根标签上添加 namespace 而不是得到不正确的名称。

示例输入 xml:

<config file-suffix="perf">
<overview-graph title="Top 5 LUN Reads" max-series="5" remove-series="1">
<counters lun:read_data=""/>
</overview-graph>
</config>

预期的输出 xml:

<config file-suffix="perf" xmlns:lun="http://www.w3.org/TR/html4/lun">
<overview-graph title="Top 5 LUN Reads" max-series="5" remove-series="1">
<counters lun:read_data="" />
</overview-graph>
</config>

使用上述代码的输出:

<config file-suffix="perf" >
<overview-graph title="Top 5 LUN Reads" max-series="5" remove-series="1">
<counters p3:read_data="" xmlns:p3="http://www.w3.org/TR/html4/lun"/>
</overview-graph>
</config>

最佳答案

我不确定是否有更好的方法,但手动添加命名空间似乎可行。

using (var reader = XmlReader.Create(@xmlFile, null, parserContext)) {
var newElement = XElement.Load(reader);
newElement.Add(new XAttribute(XNamespace.Xmlns + "lun", string.Concat(uri, "lun")));
return newElement;
}

不过,我不知道有什么方法可以概括这一点(很明显,您可以通过枚举来添加整个集合,但只输出使用过的命名空间可能会很有趣)。

关于c# - 将命名空间添加到 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11624990/

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