C# 需要从XML中获取特定值

C# 需要从XML中获取特定值,c#,xml,vb.net,linq,C#,Xml,Vb.net,Linq,我在这里学习了很多关于LINQ到XML的教程 XML文档的术语令人困惑。 有人能帮我写一段代码,根据一个条件从这个xml中提取“Name”值,例如 我需要colSDate和colAcqDate,因为Visible为True,而不是colSeqNo,因为它没有Visible属性或设置为False <XtraSerializer version="1.0" application="View"> <property name="#LayoutVersion" /> &

我在这里学习了很多关于LINQ到XML的教程

XML文档的术语令人困惑。 有人能帮我写一段代码,根据一个条件从这个xml中提取“Name”值,例如

我需要colSDate和colAcqDate,因为Visible为True,而不是colSeqNo,因为它没有Visible属性或设置为False

<XtraSerializer version="1.0" application="View">
  <property name="#LayoutVersion" />
  <property name="ActiveFilterEnabled">true</property>
  <property name="Columns" iskey="true" value="286">
    <property name="Item1" isnull="true" iskey="true">
      <property name="Name">colSeqNo</property>
    </property>
    <property name="Item2" isnull="true" iskey="true">
      <property name="Visible">true</property>
      <property name="VisibleIndex">0</property>
      <property name="Name">colSDate</property>
    </property>
    <property name="Item3" isnull="true" iskey="true">
      <property name="Visible">true</property>
      <property name="VisibleIndex">1</property>
      <property name="Name">colAcqDate</property>
    </property>
  </property>
  <property name="ActiveFilterString" />
  <property name="GroupSummarySortInfoState" />
  <property name="FindFilterText" />
  <property name="FindPanelVisible">false</property>
</XtraSerializer>

真的
科尔塞克诺
真的
0
科尔斯代特
真的
1.
可乐酸盐
假的

我正试图编写一些性能合理的数据访问代码,但荒谬的要求使其变得困难。非常感谢您的帮助。提前感谢。

这里有一种方法,使用LINQ to XML:

Dim result = From d In xml.Descendants("property")
             Where d.Attribute("name").Value = "Visible" AndAlso
                   d.Value = "true"
             From e As XElement In d.Parent.Elements
             Where e.Attribute("name").Value = "Name"
             Select e.Value

或者使用
XPath
(不确定是否需要vb或c代码,而不是一个巨大的dif):

Dim x作为XmlNodeList='。。。请原谅,我想把所有的东西都放在窗户里。
d、 选择节点(“.//属性[@name='Visible'][.='true']/../property[@name='name']”)

非常感谢,这正是我所需要的。后代方法的结果包括没有“name”属性的根元素。当试图获取“name”属性的值时,查询将引发异常。在xml.substands(“property”)中使用d中的
。@pescolino:Fixed(尽管由于某种原因它在VS中对我有效)。@pescolino:substands不包括self,请参阅参考:
注意,此方法不会在生成的IEnumerable(Of T)中返回自身。如果需要在结果中包含当前元素,请参见DegenantsAndSelf。
如果在XDocument上调用它,则会包含根元素(至少对我而言)。如果在XElement(例如doc.Root)上调用它,则不包括元素本身。