如何使用C#将默认命名空间添加到现有XSD文件

时间:2011-02-16 11:13:20

标签: c# xsd

我有一个现有的XSD文件,我想添加一个名称空间。我怎么能用C#做到这一点?

从这样的事情开始:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="BasicNoiseServiceRequest_201102" nillable="true" type="BasicNoiseServiceRequest_201102" />
  <xs:complexType name="BasicNoiseServiceRequest_201102">
    <xs:complexContent mixed="false">
      <xs:extension base="CrmServiceRequest">

我想最终得到类似的东西,其中添加了xmlns和targetNamespace属性:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema  xmlns="MyNamespace" targetNamespace="MyNamespace" 
  elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="BasicNoiseServiceRequest_201102" nillable="true" type="BasicNoiseServiceRequest_201102" />
  <xs:complexType name="BasicNoiseServiceRequest_201102">
    <xs:complexContent mixed="false">
      <xs:extension base="CrmServiceRequest">

1 个答案:

答案 0 :(得分:2)

您可以使用XDocument通过从加载的XDocument生成新的XDocument来解析和生成xml。

// Parse a string or Load a file
var doc = XDocument.Parse(
  @"<?xml version=""1.0"" encoding=""utf-8""?>
    <xs:schema elementFormDefault=""qualified"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">
      <xs:element name=""BasicNoiseServiceRequest_201102"" nillable=""true"" type=""BasicNoiseServiceRequest_201102"" />
      <xs:complexType name=""BasicNoiseServiceRequest_201102"">
        <xs:complexContent mixed=""false"">
          <xs:extension base=""CrmServiceRequest"">
           ...
          </xs:extension>
        </xs:complexContent>
      </xs:complexType>
    </xs:schema>
  ");

// Get the root of the document
var root = doc.Root;

// Create a new XDocument and add all the required attributes
// Keep all the existing xml file (declaration, child nodes, ...)
doc = new XDocument(doc.Declaration,
  new XElement(root.Name, root.Elements(),
    root.Attributes().Concat(new[]
    {
      new XAttribute("xmlns", "MyNamespace"),
      new XAttribute("targetNamespace", "MyNamespace")
    }))
);