基于xml的多语言程序
我想在我的程序中实现多种语言。我使用的xml文件如下所示:基于xml的多语言程序,xml,parsing,multilingual,Xml,Parsing,Multilingual,我想在我的程序中实现多种语言。我使用的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=
<?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>
正确解析语言的最佳方法是什么?
我想到了类似的事情
XmlNodeList xmlNodesByLanguage = xdoc.GetElementsByTagName("language");
...
String tempLang = xmlNodesByLanguage.Item(i).Attributes["id"].Value;
但是我不知道…您可以使用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
我使用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;
}
}
//反序列化语言xml
XmlSerializer ser=新的XmlSerializer(typeof(root));
字符串asdf=Path.GetDirectoryName(Assembly.getExecutionGassembly().Location);
FileStream fs=newfilestream(asdf+“\\XML\\language.XML”,FileMode.Open);
XmlReader=新的XmlTextReader(fs);
//root=xml文件的头节点
根ts=(根)序列反序列化(读卡器);
fs.Close();
//Siro_设置中的sprachennummer nach枚举
int languageNr=(int)lang;
//这是一个非常重要的问题
对于(int j=0;j
//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;
}
}