Как заменить значения XElement с помощью LINQ в C #? - PullRequest
0 голосов
/ 10 мая 2019

У меня есть XML, и он содержит несколько тегов <b>.Я хочу удалить некоторые из них в зависимости от XElement.Поэтому, если XElement равно <h1>, <h2>, <h3>, <bq> или <fc>, я хочу удалить теги <b> из их соответствующих значений.

В настоящее время я являюсьиспользуя foreach, чтобы сделать это, и это работает, но я хочу использовать только один LINQ.

Это мой код:

foreach (var item in xdoc.Descendants("h1"))
{
    if (item.Elements("b").Count() > 0)
    {
        itemvalue = item.Value.Replace("<b>", String.Empty).Replace("</b>",String.Empty);
        item.SetValue(itemvalue);
    }
}
foreach (var item in xdoc.Descendants("h2"))
{
    if (item.Elements("b").Count() > 0)
    {
        itemvalue = item.Value.Replace("<b>", String.Empty).Replace("</b>",String.Empty);
        item.SetValue(itemvalue);
    }
}
foreach (var item in xdoc.Descendants("h3"))
{
    if (item.Elements("b").Count() > 0)
    {
        itemvalue = item.Value.Replace("<b>", String.Empty).Replace("</b>",String.Empty);
        item.SetValue(itemvalue);
    }
}
foreach (var item in xdoc.Descendants("bq"))
{
    if (item.Elements("b").Count() > 0)
    {
        itemvalue = item.Value.Replace("<b>", String.Empty).Replace("</b>",String.Empty);
        item.SetValue(itemvalue);
    }
}
foreach (var item in xdoc.Descendants("fc"))
{
    if (item.Elements("b").Count() > 0)
    {
        itemvalue = item.Value.Replace("<b>", String.Empty).Replace("</b>",String.Empty);
        item.SetValue(itemvalue);
    }
}

Я хочу что-то вроде:

xdoc.Descendants().Where(el => (el.Name.LocalName == "h1" || el.Name.LocalName == "h2" || el.Name.LocalName == "h3"
                            || el.Name.LocalName == "bq" || el.Name.LocalName == "fc") && el.Value.Contains("</b>"))...Replace;

Возможно ли?

1 Ответ

1 голос
/ 10 мая 2019

Ваш код, кажется, в порядке. (Если вы знаете, что делаете)

Хотелось бы увидеть структуру вашего xml.

В любом случае, в данный момент, глядя на вас код

похоже <b> является прямым потомком <h1> (и других), и вы заменяете значение (в котором также есть тег <b>)

Надеюсь, ваша структура чем-то похожа на

<h1>
    <b><b>xyz</b></b>
</h1>

тогда это даст

<h1>
    <b>xyz</b>
<h1>

Linq

Может быть, это сработает ...

 srcTree.Descendants().Where(el => (el.Name.LocalName == "h1" || el.Name.LocalName == "h2" || el.Name.LocalName == "h3"
                            || el.Name.LocalName == "bq" || el.Name.LocalName == "fc") && el.Value.Contains("</b>")).Select(x => x).ToList().ForEach(x => x.SetValue(x.Value.Replace("<b>", String.Empty).Replace("</b>", String.Empty)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...