Использование linq для удаления тега href внутри cdata в xml-файле - PullRequest
1 голос
/ 03 апреля 2012

У меня есть следующий 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.Хотите узнать, есть ли более простой способ найти все теги href = "/ 1/2 /" внутри cdata и удалить их.Как и в приведенном выше примере, он должен просто показать контакт и дом и удалить

Ответы [ 2 ]

1 голос
/ 03 апреля 2012
void Main() 
{ 
    XDocument doc = XDocument.Load("C:\\test.xml");
    XDocument xdoc = XDocument.Parse(doc.ToString());

    XNode node = xdoc.DescendantNodes().Single(x => x.NodeType == XmlNodeType.CDATA);

    if (node.Parent != null)
    {
        string content = node.Parent.Value.Trim();
        IEnumerable<XElement> elements =
            XDocument.Parse(content).Descendants().Where(x =>
                                                             {
                                                                 XAttribute xAttribute = x.Attribute("href");
                                                                 return
                                                                     xAttribute !=
                                                                         null && xAttribute.Value == "/1/2";
                                                             });

        // do something here
    }
}

содержимое 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>
0 голосов
/ 03 апреля 2012

Я не думаю, что LINQ - лучший способ решить эту проблему. Лично я бы использовал регулярные выражения. Вот пример того, как это можно сделать:

Пример: сканирование для HREF

В целом, если вы выполняете более интенсивную обработку HTML, лучше всего использовать HTML-анализатор, например HtmlAgilityPack .

Пример кода Regex:

Regex hrefRegex = new Regex(@"href=""([^""]*"")", RegexOptions.IgnoreCase |   RegexOptions.Compiled);
string output = hrefRegex.Replace(input, new MatchEvaluator(m => string.Empty));

Надеюсь, это поможет,

Иван

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...