我有一个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;
有可能吗?
答案 0 :(得分:1)
您的代码似乎很好。(如果您知道自己在做什么)
不过,想看一下xml的结构。
无论如何,目前,通过查看您的代码
似乎<b>
是<h1>
(及其他)的直接子代,您正在替换值(值中还带有<b>
标记)
我希望你的结构有点像
<h1>
<b><b>xyz</b></b>
</h1>
然后它将给出
<h1>
<b>xyz</b>
<h1>
也许这行得通...
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)));