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

本文关键字:获取 文件 XML 何使用 Xpath | 更新日期: 2023-09-27 18:25:34

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

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

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