2012-05-18 5 views
0

내 프로그램에 여러 언어를 구현하고 싶습니다. 나는이 같은 XML 파일을 사용하고 있습니다 :xml을 포함한 다국어 프로그램

<?xml version="1.0" encoding="utf-8"?> 
<root> 
<language id="EN"> 
<String id="rxtst_found">.rxtst found</String> 
<String id="exe_found">.exe found</String> 
<String id="rxtst_not_found">No .rxtst found</String> 
<String id="exe_not_found">No .exe Found</String> 
</language> 
<language id="DE"> 
    <String id="exe_found">.exe gefunden</String> 
    <String id="rxtst_found">.rxtst gefunden</String> 
    <String id="rxtst_not_found">Keine .rxtst gefunden</String> 
    <String id="exe_not_found">Keine .exe gefunden</String> 
</language> 
    </root> 

내가 이런 언어 호출 할 :

getStringValue(String string_id, language lang) ... 

뭐죠 제대로 언어를 분석하는 가장 좋은 방법은? 나는

  XmlNodeList xmlNodesByLanguage = xdoc.GetElementsByTagName("language"); 
... 
      String tempLang = xmlNodesByLanguage.Item(i).Attributes["id"].Value; 

같은 것을 생각하지만 난 당신이 대신 SelectSingleNode 방법을 사용하여 조회 할 노드에 대한 올바른 XPath를 제공 할 수있는 단서 ...

답변

0

에 나는 xsd.exe를 사용하여 내 XML을 직렬화하고이 코드를 사용하여 데이터를 읽고 :

  //deserializes language xml 

      XmlSerializer ser = new XmlSerializer(typeof(root)); 
      String asdf = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 

FileStream fs = new FileStream(asdf + "\\XML\\language.xml", FileMode.Open); 

       XmlReader reader = new XmlTextReader(fs); 
       //root = head node of the xml file 

root ts = (root)ser.Deserialize(reader); 
      fs.Close(); 
      //sprachennummer nach enum in Siro_Settings 
      int languageNr = (int)lang; 

      //sucht nach dem passenden Value zu der stringID und gibt ihn zurück 
      for (int j = 0; j < ts.Items[languageNr].String.Length; j++) 
      { 
       if (ts.Items[languageNr].String[j].id.Equals(stringID)) 
       { 
        return ts.Items[languageNr].String[j].Value; 
       } 

      } 
0

이 없습니다.

다음 샘플은 잘 작동합니다. 그러나 그 VB.NET

Dim string_id As String = "rxtst_found" 
Dim language As String = "DE" 

Dim xdoc As XmlDocument = New XmlDocument 
xdoc.Load("C:\\sample.xml") 

Dim xPath = "root/language[@id='" + language + "']/String[@id='" + string_id + "']" 
Dim languageNode = xdoc.SelectSingleNode(xPath) 
Dim result = languageNode.InnerText