Извлечь значения из xml-файла и записать в строку excel row-wise

У меня есть ситуация здесь, я должен написать простые приложения WPF с текстовым полем и кнопкой, текстовое поле для «en», «fr», «ru» и т. Д. …

У меня много файлов с огромным количеством таких данных. Рассмотрим, что это файл

<?xml version="1.0" encoding="UTF-8"?> <params> <btestsir xml:lang="fr" tId="HHXAF">Test Sirène :</btestsir> <btestsir xml:lang="en" tId="HHXAF">Test Siren :</btestsir> <btestsir xml:lang="pt" tId="HHXAF">Testar sirene:</btestsir> <btestsir xml:lang="ru" tId="HHXAF">Тест сирены:</btestsir> <btestbeep xml:lang="fr" tId="HHXA2">Test Bip :</btestbeep> <btestbeep xml:lang="en" tId="HHXA2">Test Beep :</btestbeep> <btestbeep xml:lang="pt" tId="HHXA2">Testar aviso sonoro:</btestbeep> <btestbeep xml:lang="ru" tId="HHXA2">Тест гудка:</btestbeep> </params> 

Теперь, если я выбираю «en» через мое приложение и нажимаю кнопку, тогда только две строки, совпадающие со значениями xml: lang = «en», будут скопированы на лист excel. и будет показывать что-то подобное.

 For English language 

введите описание изображения здесь

 For Russian language 

введите описание изображения здесь

Я пробовал это

 StreamReader reader = new StreamReader(strFilepath); string line; while(null != (line = reader.ReadLine())) { string[] s1 = line.Split('>'); string[] s2 = s1[1].Split('<'); if(s1[0].Contains("xml:lang=")) { } } 

Логика позади этого проста сначала я хочу разбить каждую строку, используя «>» Итак, s1[0] будет иметь <btestsir xml:lang="fr" transId="HHXAF" s1[1] будет иметь Test Sirène :</btestsir>

Но здесь проблема, с которой я сталкиваюсь, – это получить «ключ» для определенного языка xml:lang= и поместить эту пару ключ-значение в excel sheet, как я показал на картинке. Получить «значение» легко, s2[0] будет иметь value .

Но эти две пары ключ-значение должны совпадать, а затем помещаться в лист excel, после чего он снова будет продолжен для следующей строки. Изменить: Одна точка здесь пара значений ключа должна быть помещена в разные excel-sheet для разных языковых файлов. excel-sheet.en.xlsx будет содержать все «en», excel-sheet.fr.xlsx будет содержать все «fr» и т. д.

Как я уже сказал, у меня огромные файлы, и он должен работать без ручного вмешательства.

Не могли бы вы мне помочь!

благодаря

Я бы использовал селекторы xpath и не пытаюсь манипулировать строками XML-файла. Таким образом, вы можете сделать что-то вроде объявления переменной нодлиста и заполнить ее, то есть: используя System.xml; … XmlNodeList childNodes;

childNodes = xml.SelectNodes ("ParentNodeofbtestsirNode / btestsirnode [@ lang = 'en']); … и продолжайте делать ваши манипуляции с каждым XmlNode, например foreach (XmlNode xnd в childNodes) {'…}

Что-то вроде этого должно это сделать:

 XmlDocument doc = new XmlDocument(); doc.Load("sample.xml"); var root = doc.DocumentElement; var elements = root.XPathSelectElements("//[@xml:lang='en']"); foreach (var child in elements) { //child.Name >> will give you btestsir //child.Value >> will give you Test Siren : } 

А для создания / управления электронными таблицами используйте EPPlus см. Образец здесь

  • Как я могу отфильтровать XML перед импортом или привязать его к карте в Excel
  • Не удалось правильно записать извлеченные элементы в файл excel?
  • Оценка XPath в VBA (Excel)
  • VBA parse dom, чтобы найти одно конкретное значение href
  • xpath-> query () работает только со звездочками
  • Как открыть документ в Листе Excel с помощью Xpath?
  • Использовать last () в функции FILTERXML
  • Проблема при замене значений с листа excel на запрос мыла с использованием строчного скрипта
  • Реализация HTMLBaseElement в excel vba
  • Параметр метода XPath в Excel
  • Ошибка в строчном скрипте при попытке добавить утверждение xpath
  • Давайте будем гением компьютера.