Удалить дочерний узел из выбранного родителя, но не из потомков

1

кто-нибудь, пожалуйста, помогите мне удалить внутренний тег xml, где я хочу удалить тег fn-group и fn id, но я хочу, чтобы его дочерний p, p и тег подчеркивания были сохранены

вот мой образец xml файла

     <table-wrap-foot>
     <fn-group type="footnotes">
     <fn id="c89520-1-12">
     <p>
     <emphasis type="italic">Note</emphasis>:
     In 1300, of the twenty-two cities in Italy that had populations over 20,000.
     </p>
     </fn>
     </fn-group>
     </table-wrap-foot>
     </table-wrap>

вот мой код С#

        XmlDocument myXmlDocument = new XmlDocument();
        myXmlDocument.Load("sample.xml");
        XmlNodeList xmlnode = myXmlDocument.GetElementsByTagName("table-wrap-foot");

        for (int i = 0; i < xmlnode.Count; i++)
         {
             if(xmlnode[i].InnerXml.Contains("<label>"))
             {  
             }
             else
             {
                 #here i want to delete //fn-group and fn but not p tag
             }
             }
        myXmlDocument.Save("sample.xml");

где я хочу удалить тег fn-group и fn id, но я хочу, чтобы его дочерний p, p и тег подчеркивания были сохранены здесь, это мой образец XML файла
Благодаря Appu

Теги:

2 ответа

0
Лучший ответ

Если вы можете использовать Linq-To-Xml:

XElement root = XElement.Load(file);
XElement fnGroup = root.Descendants("fn-group").First(); // or .Element("fn-group"); if fn-group is a child of root
fnGroup.Parent.Add(fnGroup.Element("fn").Elements());    
fnGroup.Remove();
root.Save(file);

Результат:

<table-wrap-foot>
  <p>
    <emphasis type="italic">Note</emphasis>:
        In 1300, of the twenty-two cities in Italy that had populations over 20,000.
  </p>
</table-wrap-foot>
  • 0
    Спасибо, теперь он работает нормально ... почему не работает с использованием пакета xml ... здесь у меня есть работа по модификации, сначала я хочу проверить тег table-warp-foot, затем я проверяю другой тег и удаляю, ..
0

Вы можете выбрать <fn-group> и удалить его из родительского узла, а затем выбрать <p> и добавить его в родительский узел, чтобы сохранить его (null проверка пропущена для краткости):

XmlNodeList xmlnode = myXmlDocument.GetElementsByTagName("table-wrap-foot");
foreach (XmlNode node in xmlnode)
{
    if (node.InnerXml.Contains("<label>"))
    {
    }
    else
    {
        var fnGroup = node.SelectSingleNode(".//fn-group");
        var p = node.SelectSingleNode(".//p");
        //remove <fn-group> from it parent
        node.RemoveChild(fnGroup);
        //append <p> to <table-wrap-foot>
        node.AppendChild(p);
    }
}
  • 0
    при выполнении вышеуказанного кода я получаю нулевое значение для var fnGroup и p

Ещё вопросы

Сообщество Overcoder
Наверх
Меню