Можете ли вы помочь написать программу на C#, которая соответствует переводу фразы в английские фразы в XML-документе?

У меня есть массив строк с английской версией и массив строк с русским переводом XML-документ выглядит так

<messages>
  <message id = "1">
    <variant language = "en_US">Customer</variant>
    <variant language = "ru_RU"/>
  </message>
  <message id = "2">
    <variant language = "en_US">Model</variant>
    <variant language = "ru_RU"/>
  </message>
</messages>

Пробовал сначала удалить узел с атрибутом ru_RU и написать новый узел с переводом, но получил ошибку "Ссылка на объект не установлена ​​на экземпляр объекта"


mlDocument xml = new XmlDocument();
xml.Load(@"C:\Users\User\source\repos\TestZad2\TestZad2\ViewerMessages.xml");          
XmlElement element = xml.DocumentElement;
                                                                                              
if (element.Attributes["variant language"].Value == "ru_RU")

{
      
xml.RemoveChild(element);

}

xml.Save(@"C:\Users\User\source\repos\TestZad2\TestZad2\ViewerMessages.xml");

Какого фактического результата вы хотите, и откуда вы собираетесь взять перевод?

Charlieface 10.07.2023 02:06

Какой у вас есть? Два массива строк или XML-документ? Если у вас есть XML, используйте XDocument, а не XmlDocument.

Enigmativity 10.07.2023 02:16

Бьюсь об заклад, что когда это исключение выдается, вы можете сказать, из какой строки оно выбрасывается. Мы тоже хотели бы знать! Тем не менее, я уверен, что это if (element.Attributes.... Вы вообще отладили это. Вы загружаете документ, а затем смотрите на первый элемент (единственный, на который вы когда-либо смотрели) и смотрите на его атрибуты. Его нет, так что бум. Подумайте о том, что вы пытаетесь сделать. С XML у вас есть иерархия элементов, и вы, вероятно, захотите их обойти.

Flydog57 10.07.2023 02:20
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот как бы я это сделал:

    var document = XDocument.Parse(@"<messages>
  <message id = ""1"">
    <variant language = ""en_US"">Customer</variant>
    <variant language = ""ru_RU""/>
  </message>
  <message id = ""2"">
    <variant language = ""en_US"">Model</variant>
    <variant language = ""ru_RU""/>
  </message>
</messages>");
    
    var variant =
    (
        from m in document.Root.Elements("message")
        where (int)m.Attribute("id") == 1
        from v in m.Elements("variant")
        where (string)v.Attribute("language") == "ru_RU"
        select v
    ).FirstOrDefault();
    
    if (variant != null)
    {
        variant.SetValue("Клиент");
    }

И это дает мне:

<messages>
  <message id = "1">
    <variant language = "en_US">Customer</variant>
    <variant language = "ru_RU">Клиент</variant>
  </message>
  <message id = "2">
    <variant language = "en_US">Model</variant>
    <variant language = "ru_RU" />
  </message>
</messages>

Другие вопросы по теме