Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 如何基于同一组中的另一个子节点获取子节点值_C# 4.0_Xpath - Fatal编程技术网

C# 4.0 如何基于同一组中的另一个子节点获取子节点值

C# 4.0 如何基于同一组中的另一个子节点获取子节点值,c#-4.0,xpath,C# 4.0,Xpath,我正在用C#开发,正在处理来自外部soap调用的xml。 我已将xml响应加载到XElement中 给定以下xml存根 <record> <node> <a>My title</a> <name>title_en</name> </node> <node> <a>...</a> <name>con

我正在用C#开发,正在处理来自外部soap调用的xml。 我已将xml响应加载到XElement中

给定以下xml存根

<record>
   <node>
       <a>My title</a>
       <name>title_en</name>
   </node>
   <node>
      <a>...</a>
      <name>contact_name</name>
   </node>
   .....
</record>
如果有更好的方法可以使用,或者有其他关于如何执行查询的建议,我愿意接受

提前感谢。

请使用以下选项:

var title = doc.Descendants("node")
               .Where(x => (string)x.Element("name") == "title_en")
               .Select(x => (string)x.Element("a"))
               .FirstOrDefault();
使用以下命令:

var title = doc.Descendants("node")
               .Where(x => (string)x.Element("name") == "title_en")
               .Select(x => (string)x.Element("a"))
               .FirstOrDefault();
您需要一个谓词来约束所需的节点元素:

/record/node[name = 'title_en']/a
您将此表达式理解为“查找记录元素,查找其名为
node
的所有子元素,这些子元素具有值为“title_en”的
name
子元素,并且对于这些子元素中的每一个,都需要一个谓词来约束您需要的节点元素:

/record/node[name = 'title_en']/a

您将此表达式理解为“查找记录元素,查找其名为
node
的所有子元素,这些子元素具有值为“title\en”的
name
子元素,对于每个子元素,查找所有
a
children”

xpath
/record/node[name='title\en']/a
将获得相关元素。目前还不清楚这个问题和XSLT有什么关系,也许会考虑延迟。“IANROBRATS我删除了XSLT标签。我在写这些问题的时候正在看代码,我把它添加到了我的错误中。cheers@IanRoberts您的解决方案工作得很好。另一个xpath是
/record/node/a[以下同级::name[.='title\u en']]
xpath
/record/node[name='title\u en']]/a
将获得相关元素。P.S。目前还不清楚这个问题和XSLT有什么关系,也许会考虑延迟。“IANROBRATS我删除了XSLT标签。我在写这些问题的时候正在看代码,我把它添加到了我的错误中。cheers@IanRoberts您的解决方案工作得很好。另一个xpath是
/record/node/a[以下兄弟姐妹::name[.='title\u en']]
建议不错,但我更喜欢使用xpath表达式。建议不错,但我更喜欢使用xpath表达式。