我有一个现有的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">
答案 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")
}))
);