使用linq删除xml文件中cdata内的href标记
我有以下xml文件:使用linq删除xml文件中cdata内的href标记,linq,c#-4.0,Linq,C# 4.0,我有以下xml文件: <ab> <![CDATA[ <table> <tbody> <tr> <th>abcdef</th> <th><a href="/1/2" target="_blank">Contact</a></
<ab>
<![CDATA[
<table>
<tbody>
<tr>
<th>abcdef</th>
<th><a href="/1/2" target="_blank">Contact</a></th>
</tr>
<tr>
<p>
<a href="/1/2" target="_blank">Home</a>
</p>
</tr>
</tbody>
</table>
]]>
</ab>
]]>
我还在学习linq。想知道是否有更简单的方法查找cdata中的所有a href=“/1/2/”标记并将其删除。就像上面的例子一样,它应该只显示Contact和Home并删除,我不认为LINQ是解决这个问题的最佳方式。就我个人而言,我会使用正则表达式。下面是一个如何做到这一点的示例: 一般来说,如果要进行更密集的HTML处理,使用HTML解析器可能是最好的方法,例如 正则表达式示例代码:
Regex hrefRegex = new Regex(@"href=""([^""]*"")", RegexOptions.IgnoreCase | RegexOptions.Compiled);
string output = hrefRegex.Replace(input, new MatchEvaluator(m => string.Empty));
希望这有帮助
伊万我不认为林肯是解决这个问题的最好办法。就我个人而言,我会使用正则表达式。下面是一个如何做到这一点的示例: 一般来说,如果要进行更密集的HTML处理,使用HTML解析器可能是最好的方法,例如 正则表达式示例代码:
Regex hrefRegex = new Regex(@"href=""([^""]*"")", RegexOptions.IgnoreCase | RegexOptions.Compiled);
string output = hrefRegex.Replace(input, new MatchEvaluator(m => string.Empty));
希望这有帮助
伊万void Main()
{
XDocument doc=XDocument.Load(“C:\\test.xml”);
XDocument xdoc=XDocument.Parse(doc.ToString());
XNode node=xdoc.degenantnodes().Single(x=>x.NodeType==XmlNodeType.CDATA);
如果(node.Parent!=null)
{
字符串内容=node.Parent.Value.Trim();
可数元素=
XDocument.Parse(content.subscriptions()。其中(x=>
{
XAttribute XAttribute=x.Attribute(“href”);
返回
致敬=
null&&xAttribute.Value==“/1/2”;
});
//在这里做点什么
}
}
test.xml的内容是
<ab>
<![CDATA[
<table>
<tbody>
<tr>
<th>abcdef</th>
<th><a href="/1/2" target="_blank">Contact</a></th>
</tr>
<tr>
<p>
<a href="/1/2" target="_blank">Home</a>
</p>
</tr>
</tbody>
</table>
]]>
</ab>
]]>
void Main()
{
XDocument doc=XDocument.Load(“C:\\test.xml”);
XDocument xdoc=XDocument.Parse(doc.ToString());
XNode node=xdoc.degenantnodes().Single(x=>x.NodeType==XmlNodeType.CDATA);
如果(node.Parent!=null)
{
字符串内容=node.Parent.Value.Trim();
可数元素=
XDocument.Parse(content.subscriptions()。其中(x=>
{
XAttribute XAttribute=x.Attribute(“href”);
返回
致敬=
null&&xAttribute.Value==“/1/2”;
});
//在这里做点什么
}
}
test.xml的内容是
<ab>
<![CDATA[
<table>
<tbody>
<tr>
<th>abcdef</th>
<th><a href="/1/2" target="_blank">Contact</a></th>
</tr>
<tr>
<p>
<a href="/1/2" target="_blank">Home</a>
</p>
</tr>
</tbody>
</table>
]]>
</ab>
]]>
我对正则表达式一窍不通。您能告诉我如何使用regex删除上述问题的a href标记吗?@nearchMe Ivan提供的示例非常简单,是开始研究您的解决方案的良好基础。@Ivan-我不需要查找所有href,我需要精确查找href=“/1/2”。那么这是正确的方法吗?(@“href=”“([^/1/2])“href=”“/1/2”-这里有一个链接,指向一个使用正则表达式的好工具,因此您可以进行实验。首先,我必须说expresso是一个很好的工具,如果您想使用linq,我已经做了您想做的事情。我对正则表达式一点也不擅长。您能告诉我如何使用正则表达式删除上述问题的a href标记吗?@nearome示例provIvan的想法非常简单,是开始研究您的解决方案的良好基础。@Ivan-我不需要查找所有href,我需要精确查找href=“/1/2”。那么这是正确的方法吗?(@“href=”“([^/1/2])“href=”“/1/2”-这里有一个链接,指向一个使用regex的好工具,你可以尝试一下。首先,我必须说expresso是一个很好的工具,如果你想使用linq,我已经做了你想做的。关于使用regex解析html,有一个很大的争论,这篇文章总结了这一点。如果你有时间阅读一下,这很有趣关于使用正则表达式解析本文总结的html,请稍等片刻,阅读一下,它非常有趣。当然,如果cdata中的内容格式糟糕,它不会加载到xdocument中,但在这种情况下,它不会加载到xdocument中:)当然,如果cdata中的内容格式糟糕,则不会加载到xdocument中,但在本例中,情况并非如此:)