0

プログラムに複数の言語を実装したい。私はこのような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;

しかし、私には手がかりがありません...

4

2 に答える 2

0

代わりに SelectSingleNode メソッドを使用して、クエリを実行するノードに有効な XPath を指定できます。

次のサンプルはうまくいきます。ただし、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
于 2012-05-18T14:00:12.717 に答える
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;
                }

            }
于 2012-05-24T09:06:26.573 に答える