удалить атрибуты из элемента root в XDocument c# - PullRequest
0 голосов
/ 08 апреля 2020

Потратив часы на чтение сообщений, связанных с моим вопросом, я все еще в растерянности. Я загрузил мой xml файл в объект XDocument:

XDocument xDoc = XDocument.Load("fileName");

Элемент root в файле содержит 2 атрибута "xmlns":

<creditBureau xmlns="some url" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Мне нужно оставить только с <creditBureau>. Если я вручную удаляю оба атрибута из исходного файла, я могу использовать var trades = xDoc.XPathSelectElements("/creditBureau/. . ."); для анализа необходимых мне данных из остальной части объекта XDocument.

Я могу собрать оба атрибута в var attributes:

root attributes

и я могу удалить атрибут xmlhs: xsi следующим образом:

    var attributes = xDoc.Root.Attributes();
    foreach (var attribute in attributes)
    {
        if (attribute.Name.LocalName.Equals("xsi"))
        {
            attribute.Remove();
        }
    }

after first remove

xDoc after first removal

Но повторение того же лога c, чтобы попытаться удалить оставшийся атрибут, похоже, не работает:

var attributes2 = xDoc.Root.Attributes();
foreach (var attribute in attributes2)
{
    if (attribute.Name.LocalName.Equals("xmlns"))
    {
        attribute.Remove();
    }
}

При наведении курсора на xDo c я все еще вижу атрибут xmlns, и мой последующий метод XPathSelectElements не возвращает никаких результатов.

xDoc after 2nd removal

Опять же, если я вручную удалю эти 2 атрибута из исходного файла, я получу ожидаемые xml элементы:

xml elements

Возможно, я делаю это сложнее, чем нужно. Как я уже упоминал в начале, я часами читал и пробовал предлагаемые решения, но безрезультатно. Большая часть прочитанного относится к XmlDocument или к удалению атрибутов из потомков, а не root. Буду очень признателен за любую помощь, и я заранее извиняюсь, если уже есть опубликованный ответ, который я упустил.

...