如何用c#代替xml中的xmlns



我尝试用version替换xmlns version(任何版本)http://schemas.telerik.com/reporting/2012/3.6。inside c# project

这是我得到的输入

<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://schemas.telerik.com/reporting/2012/4.0" 
SnapGridSize="0.1cm" ShowSnapGrid="True" Name="NoviUgovor" Width="18.462cm">
</Report>

输入xmlns版本的Telerik报告是可变的。

这就是我想要得到的:

<?xml version="1.0" encoding="UTF-8"?>
<Report xmlns="http://schemas.telerik.com/reporting/2012/3.6" 
SnapGridSize="0.1cm" ShowSnapGrid="True" Name="NoviUgovor" Width="18.462cm">
</Report>

输出xmlns版本的teleerik报告必须是

http://schemas.telerik.com/reporting/2012/3.6

这是项目内部的代码:

var doc = XDocument.Parse(rpt_dok);//rpt_dok (xml)
doc.Root.Attributes().Where(x => x.IsNamespaceDeclaration).Remove();
doc.Root.Add(new XAttribute("xmlns", "http://schemas.telerik.com/reporting/2012/3.6"));
rpt_dok = doc.ToString(); //error appears

I got error:

附加信息:前缀"不能在相同的开始元素标签中从'http://schemas.telerik.com/reporting/2012/4.0'重新定义为'http://schemas.telerik.com/reporting/2012/3.6'。

我试过https://dotnetfiddle.net/qFuwWk但是没有运气。

请帮忙!

更改xmlns相当棘手。需要更换整个节点。我认为最简单和最可靠的方法是修复xml

文本。
rpt_dok = rpt_dok.Replace("http://schemas.telerik.com/reporting/2012/4.0", 
"http://schemas.telerik.com/reporting/2012/3.6");

或者如果你不知道你用的是什么版本,你需要先得到版本字符串

var doc = XDocument.Parse(rpt_doc); //rpt_dok (xml)
string xmlns= doc.Root.Attributes().Where(x => x.IsNamespaceDeclaration).First().Value;
rpt_dok = rpt_dok.Replace(xmlns, "http://schemas.telerik.com/reporting/2012/3.6");
doc = XDocument.Parse(rpt_doc)
... your code

和你的小提琴的例子

string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<Main version=""1.0"" xmlns=""urn:root:v1"">
<Report>
<Title>Some Value</Title>
</Report>
<Content>
<Address>
<CountryName xmlns=""urn:location:v2"">Australia</CountryName>
</Address>
</Content>
</Main>";
var doc = XDocument.Parse(xml);
var xmlns = doc.Descendants().Attributes()
.Where(x => x.IsNamespaceDeclaration)
.Select(x => x.ToString());

foreach (var ns in xmlns)
{
if (ns.Contains("root"))
xml = xml.Replace(ns, ns.Replace("xmlns", "xmlns:root"));
else if (ns.Contains("location"))
xml = xml.Replace(ns, ns.Replace("xmlns", "xmlns:loc"));
}
doc = XDocument.Parse(xml);
Console.WriteLine(doc);

您不必删除当前属性,它将被SetAttributeValue覆盖。

doc.Root.SetAttributeValue("xmlns", "http://schemas.telerik.com/reporting/2012/3.6"");

相关内容

  • 没有找到相关文章

最新更新