[英]c# How to get specific values from XML files by using Xpath
我试图找出如何从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识别为相对路径:
if (searchWord == nodelist[n].SelectSingleNode("./tuv[1]/seg").InnerText) {
result = nodelist[n].SelectSingleNode("./tuv[2]/seg").InnerText;
}
或 :
if (searchWord == nodelist[n].SelectSingleNode("tuv[1]/seg").InnerText) {
result = nodelist[n].SelectSingleNode("tuv[2]/seg").InnerText;
}
您必须使用XPath吗?
使用Linq-To-Xml
XElement root = XElement.Load(file);
var segs = root.Descendants("seg");
XElement check = null;
var resultNode = segs.FirstOrDefault(x =>
{
if ((string)check == "Memory")
return true;
check = x;
return false;
});
string result = (string)resultNode;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.