如何在 C# 中创建具有命名空间的文档

Posted 姚家湾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在 C# 中创建具有命名空间的文档相关的知识,希望对你有一定的参考价值。

在有的XML 文档中的tag 和属性是带有分号的,例如xmlns:ua ,ua:root 等。这涉及不同的命名空间。在C#中需要特别的编程。网络上讲的稀里糊涂。这里记录了一些方法。

例1

// Create an XML tree in a namespace.
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);

产生的XML 文档

<Root xmlns="http://www.adventure-works.com">
  <Child>child content</Child>
</Root>

例2

// Create an XML tree in a namespace, with a specified prefix
XNamespace aw = "http://www.adventure-works.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XElement(aw + "Child", "child content")
);
Console.WriteLine(root);

产生的XML

<aw:Root xmlns:aw="http://www.adventure-works.com">
  <aw:Child>child content</aw:Child>
</aw:Root>

例3:

// The http://www.adventure-works.com namespace is forced to be the default namespace.
XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute("xmlns", "http://www.adventure-works.com"),
    new XAttribute(XNamespace.Xmlns + "fc", "www.fourthcoffee.com"),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);

产生的XML

<Root xmlns="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <DifferentChild>other content</DifferentChild>
  </fc:Child>
  <Child2>c2 content</Child2>
  <fc:Child3>c3 content</fc:Child3>
</Root>

例4

XNamespace aw = "http://www.adventure-works.com";
XNamespace fc = "www.fourthcoffee.com";
XElement root = new XElement(aw + "Root",
    new XAttribute(XNamespace.Xmlns + "aw", aw.NamespaceName),
    new XAttribute(XNamespace.Xmlns + "fc", fc.NamespaceName),
    new XElement(fc + "Child",
        new XElement(aw + "DifferentChild", "other content")
    ),
    new XElement(aw + "Child2", "c2 content"),
    new XElement(fc + "Child3", "c3 content")
);
Console.WriteLine(root);

产生的XML

<aw:Root xmlns:aw="http://www.adventure-works.com" xmlns:fc="www.fourthcoffee.com">
  <fc:Child>
    <aw:DifferentChild>other content</aw:DifferentChild>
  </fc:Child>
  <aw:Child2>c2 content</aw:Child2>
  <fc:Child3>c3 content</fc:Child3>
</aw:Root>

例5

// Create an XML tree in a namespace, with a specified prefix
XElement root = new XElement("http://www.adventure-works.comRoot",
    new XAttribute(XNamespace.Xmlns + "aw", "http://www.adventure-works.com"),
    new XElement("http://www.adventure-works.comChild", "child content")
);
Console.WriteLine(root);

产生的XML

<aw:Root xmlns:aw="http://www.adventure-works.com">
  <aw:Child>child content</aw:Child>
</aw:Root>

我的代码

 var doc = new XDocument();
     doc.Declaration = new XDeclaration(new XDeclaration("1.0", "utf-8", ""));
     XNamespace aw = "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd";
     XElement UANodeSet = new XElement(aw+"UANodeSet");            
UANodeSet.Add(new XAttribute(XNamespace.Xmlns+"xsi", "http://www.w3.org/2001/XMLSchema-instance"));
UANodeSet.Add(new XAttribute(XNamespace.Xmlns+"uax", "http://opcfoundation.org/UA/2008/02/Types.xsd"));
 UANodeSet.Add(new XAttribute( "xmlns", "http://opcfoundation.org/UA/2011/03/UANodeSet.xsd"));
 UANodeSet.Add(new XAttribute(XNamespace.Xmlns + "s1", "http://yourorganisation.org/demo2022/Types.xsd"));
UANodeSet.Add(new XAttribute(XNamespace.Xmlns+"ua", "http://unifiedautomation.com/Configuration/NodeSet.xsd"));
UANodeSet.Add(new XAttribute(XNamespace.Xmlns+"xsd", "http://www.w3.org/2001/XMLSchema"));    doc.Add(UANodeSet);
doc.Save(FileName);

产生的XML 文档

<?xml version="1.0" encoding="utf-8"?>
<UANodeSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:uax="http://opcfoundation.org/UA/2008/02/Types.xsd" xmlns="http://opcfoundation.org/UA/2011/03/UANodeSet.xsd" xmlns:s1="http://yourorganisation.org/demo2022/Types.xsd" xmlns:ua="http://unifiedautomation.com/Configuration/NodeSet.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />

结束语

感兴趣的读者细品。

以上是关于如何在 C# 中创建具有命名空间的文档的主要内容,如果未能解决你的问题,请参考以下文章

ReactiveMongoDatabase:如何预先创建集合:无法在多文档事务中创建命名空间

在 .NET 中创建 C++ ATL COM 嵌套命名空间,如 System 命名空间

SWIG / C#:命名空间和模板

无法在多文档事务中创建命名空间(MongoDB 4.0、Spring Data 2.1.0、Spring Boot)

如何在 Python 中创建命名空间包?

如何在命名空间中创建私有变量?