Я борюсь с разумным логическим циклом для удаления узлов из файла XML, слишком большого для использования с XPath, поддерживающим классы .NET.
Я пытаюсь заменить одну строку кода, которая была у меня (которая называлась SelectNodes строкой запроса XPath), кодом, который делает то же самое, но использует XmTextReader.
Мне нужно пройти несколько уровней вниз, как показано ранее используемым запросом XPath (который был для справки):
ConfigurationRelease/Profiles/Profile[Name='MyProfileName']/Screens/Screen[Id='MyScreenId']/Settings/Setting[Name='MySettingName']
Я думал, что это будет раздражающим, но простым. Тем не менее, я просто не могу понять, как правильно.
Мне нужно получить узел, проверить узел под ним, чтобы увидеть, соответствует ли значение целевой строке, и затем идти дальше, если это так, или пропустить эту ветку, если это не так.
На самом деле, я думаю, что моя проблема в том, что я не знаю, как игнорировать ветку, если я не заинтересован в ней. Я не могу позволить ему обходить нерелевантные ветви, поскольку имена элементов не являются уникальными (как показано в запросе XPath).
Я думал, что смогу поддерживать некоторые логические значения, например bool ОжидаетProfileName, который устанавливается в значение true, когда я нажимаю на узел профиля. Однако, если это не тот конкретный узел профиля, который я хочу, я не могу выйти из этой ветви.
Так что ... надеюсь, это имеет смысл для кого-то ... Я смотрю на проблему пару часов и, возможно, просто упускаю что-то очевидное .....
Я хотел бы опубликовать часть файла, но не могу понять, какова структура примерно:
ConfigRelease > Profiles > Profile > Name > Screens > Screen > Settings > Setting > Name
Я буду знать ProfileName, ScreenName и SettingName, и мне нужен узел Setting.
Я стараюсь не читать весь файл одним ударом, например при запуске приложения, потому что половина его содержимого никогда не будет использована. У меня также нет контроля над тем, что генерирует XML-файл, поэтому я не могу изменить его, говоря, создать несколько меньших файлов.
Любые советы будут с благодарностью.
UPDATE
Я снова открыл это. Плакат предложил XPathDocument, который должен был быть идеальным. К сожалению, я не упомянул, что это мобильное приложение и XPathDocument не поддерживается.
Файл невелик по большинству стандартов, поэтому система изначально была закодирована для использования XmlDocument. В настоящее время он составляет 4 МБ, что, по-видимому, достаточно велико, чтобы вывести из строя мобильное приложение при загрузке в XmlDocument. Это, вероятно, так же хорошо, как он появился сейчас, так как файл рассчитан на гораздо больший размер. Во всяком случае, сейчас я пробую предложение DataSet, но все еще открыта для других идей.
ОБНОВЛЕНИЕ 2
Я стал подозрительным, потому что довольно много людей сказали, что не ожидают, что файл такого размера приведет к краху системы. Дальнейшие эксперименты показали, что это прерывистый сбой. Вчера он каждый раз падал, но сегодня утром после перезагрузки устройства я не могу воспроизвести его. Я сейчас пытаюсь выяснить надежный набор репродуктивных шагов. А также решить, как лучше решить проблему, которая, я уверен, все еще существует. Я не могу просто оставить его, потому что, если приложение не может получить доступ к этому файлу, оно бесполезно, и я не думаю, что может сказать своим пользователям, что они не могут запускать что-либо еще на своих устройствах, когда мое приложение работает ... ....