如何使用Xpath从XML文件获取特定值

弘树

我试图找出如何从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表达式包含一些错误。如果您能提供任何见解,我们将不胜感激。

har07

您需要添加前导点(.删除前导斜线(/)才能将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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章