仅在root上使用XML命名空间前缀

时间:2018-02-01 13:57:55

标签: c# xml

我正在使用Task Factory XML Output Destination任务创建一个XML文档,虽然输出需要一些调整,我似乎无法找到在任务中执行此操作的方法,所以我认为我能够做到这一点通过C#的脚本组件。

这是我正在使用的XML

<?xml version="1.0" encoding="utf-8"?>
<CSDS xmlns="http://www.datadictionary.nhs.uk/messages/CSDS-v1-0">
  <CYP000>
    <C000010>1.0</C000010>
  </CYP000>
</CSDS>

我需要将XML更改为:

<?xml version="1.0" encoding="utf-8"?>
<CSDS:CSDS xmlns:CSDS="http://www.datadictionary.nhs.uk/messages/CSDS-v1-0">
  <CYP000>
    <C000010>1.0</C000010>
  </CYP000>
</CSDS>

我尝试创建一个新的XDocument,声明命名空间并添加源元素,但这会将命名空间添加到所有元素。

string xmlFile = @"C:\Temp\csds.xml";
string newXmlFile = @"C:\Temp\csds-new.xml";

XDocument sourceXml = XDocument.Load(xmlFile);
XNamespace ns = "http://www.datadictionary.nhs.uk/messages/CSDS-v1-0";
XDocument newXml = new XDocument(new XDeclaration("1.0", "utf-8", null));
XElement newRoot = new XElement(ns + "CSDS",
        new XAttribute(XNamespace.Xmlns + "CSDS", ns.NamespaceName));

newRoot.Add(sourceXml.Root.Elements());
newRoot.Save(newXmlFile);

输出

<?xml version="1.0" encoding="utf-8"?>
<CSDS:CSDS xmlns:CSDS="http://www.datadictionary.nhs.uk/messages/CSDS-v1-0">
  <CSDS:CYP000>
    <CSDS:C000010>1.0</CSDS:C000010>
  </CSDS:CYP000>
</CSDS:CSDS>

1 个答案:

答案 0 :(得分:0)

我发现加载文件后执行以下操作与我的其余代码一起使用:

foreach (var descendants in sourceXml.Root.Descendants())
     descendants.Name = descendants.Name.LocalName;
相关问题