2015-10-06 49 views
0

我在這裏有一種情況,我必須用一個文本框和一個按鈕編寫一個簡單的WPF應用程序,文本框用於「en」,「fr」, 「ru」等...從xml文件中提取值並將其寫入excel工作表中逐行寫入

我有很多這樣的數據數量巨大的文件。考慮這是一個文件

<?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> 

現在,如果我選擇「連接」,通過我的應用程序,並單擊按鈕,然後只有兩根弦,其XML:LANG =「EN」值匹配將被複制到一個Excel工作表。並會顯示像這樣的東西。

For English language 

enter image description here

For Russian language 

enter image description here

我已經試過這

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工作表,正如我在圖片顯示。獲取「價值」很容易s2[0]將有value

但是,這兩個鍵值對應匹配,然後放入Excel表,然後它將再次繼續下一行。 編輯:此處的關鍵值對應該放入不同的excel表單中,用於不同的語言文件。 excel-sheet.en.xlsx將包含所有「en」,excel-sheet.fr.xlsx將包含所有「fr」等

正如我所說我有大文件,它應該無縫工作,無需人工干預。

你能幫助我嗎!

感謝

+0

他們這樣做的方式並不理想。您應該更適合使用XML。 – Yahya

+0

我知道,但我也知道這個代碼是2002年的代碼,我不能做得比這更好,btw它不是一個XML文件,它可能看起來像。此外,爲了得到理想的解決方案,我已經到了這裏。 – Debhere

回答

2

我會用XPath選擇,不要試圖一個XML文件的字符串操作。所以你可以做一些事情,比如聲明一個nodelist變量並填充它,例如: using System.xml; ... XmlNodeList childNodes;

的childNodes = xml.SelectNodes(「ParentNodeofbtestsirNode/btestsirnode [@郎= 'EN']); ... ,並從那裏做針鋒相對的XmlNode您的操作,如 的foreach(在的childNodes XmlNode的XND)繼續 { 」 ...... }

+0

但主要問題是如何將這些鍵值對逐行放入excelsheet,獲取我的代碼也在做的值,可能不是有效的方式,但這些值應該放入不同的excelsheet中以適用於不同的語言 – Debhere

+0

您現在寫一個新的excel文件,你只是想知道如何創建/選擇工作表,或者你有一個已經存在的文件,可能你正在追加? –

+0

是的,我正在爲每種語言創建一個新文件,然後我在excel表格中爲這種特定語言添加明智的行值,請更新我的問題 – Debhere

2

像這樣的東西應該這樣做:

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 see sample here

+0

但主要問題是如何將這些關鍵值對逐行放入Excel表格中 – Debhere

+0

@Debhere我已經添加了一個鏈接,指向我對EPPLus示例的答案。不幸的是,沒有人能握住你的手,並通過確切的解決方案。這是一個問答網站。 – Yahya