【发布时间】:2014-10-03 04:42:42
【问题描述】:
我正在尝试找出如何从 tmx 文件(即 XML 文件)中获取翻译后的内存。
这是我正在处理的 tmx 文件的摘录。
<tmx>
<body>
<tu tuid="1">
<tuv xml:lang="en-US">
<seg>Memory</seg>
</tuv>
<tuv xml:lang="ar">
<seg>XXXXX</seg>
</tuv>
</tu>
<tu tuid="2">
<tuv xml:lang="en-US">
<seg>Address</seg>
</tuv>
<tuv xml:lang="ar">
<seg>yyyyy</seg>
</tuv>
</tu>
//
<body>
<tmx>
我正在尝试做的是在“seg”中搜索特定值,然后在下一个“seg”中获取相应的值。
在上面的例子中,如果我正在寻找
<seg>Memory<seg>
那么,我需要检索
<seg>xxxxx<seg>
我的编码是这样的。
DataRow[] searchWordsArray = keyStrings.ToArray();
XmlNodeList nodelist = doc.SelectNodes("//body//tu");
for (int i = 0; i < searchWordsArray.Length; i++){
for (int n = 0; n < nodelist.Count; n++) {
string searchWord = searchWordsArray[i][KeyCol].ToString();
string result = "";
if (searchWord == nodelist[n].SelectSingleNode("/tuv[1]/seg").InnerText) {
result = nodelist[n].SelectSingleNode("/tuv[2]/seg").InnerText;
} else {
result = "No match";
}
}
}
但是,此代码在
处获得空引用异常if (searchWord == nodelist[n].SelectSingleNode("/tuv[1]/seg").InnerText) {
我猜我的 Xpath 表达式包含一些错误。 如果您能提供任何见解,我将不胜感激。
【问题讨论】:
-
您的 XPath 表达式非常好。他们只是不选择您提供的 XML 中的任何内容。查看任何 XPath 参考或快速入门(即 Xpath Examples on MSDN )以确认您是否正确理解 XPath 中
/和//之间的区别。 -
您已经在
tu节点中,所以不要使用/tuv[x]/...。请改用tuv[x]/...。正如阿列克谢所提到的,请阅读/和//所做的事情。 -
您的 xml 无效,tmx 和 body 标签没有结束标签。如果您的意思是底部的两个标签是它们...