使用XElement删除XML中的多个属性

时间:2016-04-15 07:34:15

标签: c# xml vb.net svg linq-to-xml

这是我的xml(或者说svg):

<svg xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:version="0.48.2 r9819"
sodipodi:docname="android.svg" viewbox="0 0 32 54">
[Some nodes below]
</svg>

从这一点开始,我想删除名称中包含inkscapesodipodi的所有属性(在这种情况下,应保留的属性为viewbox

希望你能帮助我。谢谢!

1 个答案:

答案 0 :(得分:2)

这是可能的方式:

var raw = @"<svg xmlns:sodipodi='http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd'
xmlns:inkscape='http://www.inkscape.org/namespaces/inkscape'
inkscape:version='0.48.2 r9819'
sodipodi:docname='android.svg' viewbox='0 0 32 54'>
[Some nodes below]
</svg>";
var svg = XElement.Parse(raw);
var keywords = new[] { "inkscape", "sodipodi" };
svg.Attributes()
   .Where(o => keywords.Any(k => o.Name.ToString().Contains(k)))
   .Remove();
Console.WriteLine(svg.ToString());

<强> dotnetfiddle demo

输出

<svg viewbox="0 0 32 54">
[Some nodes below]
</svg>