繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM