Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用linq删除xml文件中cdata内的href标记_Linq_C# 4.0 - Fatal编程技术网

使用linq删除xml文件中cdata内的href标记

使用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></

我有以下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>


]]>

我还在学习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中,但在本例中,情况并非如此:)