我尝试用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"");