gpt4 book ai didi

c# - 如何在 XDocument 中添加命名空间和声明

转载 作者:太空宇宙 更新时间:2023-11-03 15:40:01 24 4
gpt4 key购买 nike

我正在用 C# 创建 xml,并想添加 Namespace 和 Declaration 。我的 xml 如下:

XNamespace ns = "http://ab.com//abc";

XDocument myXML = new XDocument(
new XDeclaration("1.0","utf-8","yes"),
new XElement(ns + "Root",
new XElement("abc","1")))

这将同时在根级别和子元素 abc 级别添加 xmlns=""

<Root xmlns="http://ab.com/ab">
<abc xmlns=""></abc>
</Root>

但我只希望它在根级别而不是子级别,如下所示:

<Root xmlns="http://ab.com/ab">
<abc></abc>
</Root>

以及如何在顶部添加声明,我的代码在运行后不显示声明。

请帮助我获取完整的 xml 作为

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<Root xmlns="http://ab.com/ab">
<abc></abc>
</Root>

最佳答案

您需要在子元素中使用相同的命名空间:

XDocument myXML = new XDocument(
new XDeclaration("1.0","utf-8","yes"),
new XElement(ns + "Root",
new XElement(ns + "abc", "1")))

如果您只使用 "abc",这将被转换为没有命名空间的 XName。然后,这会导致添加一个 xmlns="" 属性,这样 abc 的完全限定元素名称将被解析为这样。

通过将名称设置为 ns + "abc" 转换为字符串时不会添加 xmlns 属性作为 http://ab 的默认命名空间.com/ab 继承自Root

如果您想简单地“继承”命名空间,那么您将无法以如此流畅的方式执行此操作。您可以使用父元素的命名空间创建 XName,例如:

 var root = new XElement(ns + "Root");
root.Add(new XElement(root.Name.Namespace + "abc", "1"));

关于声明,XDocument 在调用ToString 时不包含此声明。如果您使用 Save 写入 StreamTextWriter,或者如果您提供一个 XmlWriter在其 XmlWriterSettings 中没有 OmitXmlDeclaration = true

如果你只想得到字符串,this question有一个使用 StringWriter 的漂亮扩展方法的答案。

关于c# - 如何在 XDocument 中添加命名空间和声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580100/

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