2013-05-06 82 views
1

我想提取一个svg element,他的类名是C# regex通过类名选择xml元素和正则表达式

例如,我有这样的:

<path fill="none" ... class="highcharts-tracker highcharts-tracker" ... stroke-width="22" zIndex="2" style=""/> 

而且我想通过删除与highcharts-tracker的类名的每个路径元素:

new Regex(""); 

有人知道吗?

+0

您使用的是什么XML API?你是否真的需要正则表达式来匹配类匹配,或者你可以指定要移除的类名称并分割属性值? – 2013-05-06 09:46:41

+0

我只是有一个字符串的svg代码。这就是为什么我想使用正则表达式。 – Dragouf 2013-05-06 09:47:52

+0

不,不,不。你不应该把它当作一个字符串来对待。它的意思是XML,所以你应该*使用它作为XML。其他任何事情都将导致大量的痛苦。 – 2013-05-06 09:48:32

回答

4

在LINQ to XML,这是非常简单的:

var classToRemove = "highlights-tracker"; 
var xml = XDocument.Parse(svg); 
var elements = doc.Descendants("path") 
        .Where(x => x.Attribute("class") != null && 
           x.Attribute("class") 
           .Value.Split(' ') 
           .Contains(classToRemove)); 
// Remove all the elements which match the query 
elements.Remove(); 

你应该使用正则表达式来尝试解析XML,XML ......是很好的通过现有的API来处理,和正则表达式不是一个合适的工具。

编辑:如果它是畸形的(你应该说开始),你应该尝试找出为什么它的畸形和之前将其修复你尝试做任何其他处理。现在真的没有理由对XML进行错误修改......现有的各种平台都有很多优秀的XML API。

+0

好的谢谢,会尝试,但如果然后我想渲染元素作为文本如何我要做 ? – Dragouf 2013-05-06 09:57:48

+0

@Dragouf:如果它不是有效的XML,那么就没有这样的东西作为一个元素,是吗?我不明白你为什么反对实际获得有效数据的想法。 – 2013-05-06 10:01:55

+0

好吧,我的意思是在这种情况下,我可以如何将“元素”变量呈现为文本? – Dragouf 2013-05-06 10:10:55