XDocument.Descendants() 过滤太多
XDocument.Descendants() filters too much
我有一个 XML 字符串,我试图从中提取 select 元素,但我发现我对 XDocument.Decendents() 方法感到困惑。这是示例 XML.
<response>
<control>
<status>success</status>
<dtdversion>3.0</dtdversion>
</control>
<operation>
<authentication>
<status>success</status>
<userid>jsmith</userid>
<companyid>1621876182</companyid>
<sessiontimestamp>2017-10-23T11:57:27-07:00</sessiontimestamp>
</authentication>
<result>
<status>success</status>
<function>GetFields</function>
<controlid>723973</controlid>
<data listtype="All" count="1">
<type fieldname="ID">User Id</type>
<type fieldname="FIRSTNAME">User First Name</type>
<type fieldname="LASTNAME">User Last Name</type>
<type fieldname="MIDDLEINITIAL">User Middle Initial</type>
<type fieldname="ADDRESS1">User Address 1</type>
<type fieldname="ADDRESS2">User Address 1</type>
<type fieldname="CITY">City of User Residence</type>
<type fieldname="STATE">State of User Residence</type>
<type fieldname="PHONENUMBER">User Phone Number</type>
<type fieldname="EMAIL">User Email Address</type>
</data>
</result>
</operation>
</response>
我的目标是获取 data
节点内的节点值列表。我发现以下作品和 returns 10 个元素的列表。
List<string> nodeList = xml.Descendants().Attributes("fieldname").Select(x => x.Value).ToList<string>();
让我感到困惑的是,我试图将 data
节点指定为我应该在其下查找子节点的唯一节点。我刚刚将 "data" 作为 XName
参数添加到 Descendants()
方法中。
List<string> nodeList = xml.Descendants("data").Attributes("fieldname").Select(x => x.Value).ToList<string>();
本例中的结果返回 nodeList
计数为零。我只是想更具体地定义哪些节点应该被 selected 以便 XML 文档中属性名称为 "fieldname" 的其他节点不会被 select除了 <data>
节点的子元素之外的其他元素。我不确定为什么我得到零结果,希望有人能对此有所了解。
我认为后代过滤了数据类型的后代,但没有具有属性的数据后代。
试试这个:
List<string> nodeList = xml.Descendants("data").Descendants().Attributes("fieldname").Select(x => x.Value).ToList<string>();
我有一个 XML 字符串,我试图从中提取 select 元素,但我发现我对 XDocument.Decendents() 方法感到困惑。这是示例 XML.
<response>
<control>
<status>success</status>
<dtdversion>3.0</dtdversion>
</control>
<operation>
<authentication>
<status>success</status>
<userid>jsmith</userid>
<companyid>1621876182</companyid>
<sessiontimestamp>2017-10-23T11:57:27-07:00</sessiontimestamp>
</authentication>
<result>
<status>success</status>
<function>GetFields</function>
<controlid>723973</controlid>
<data listtype="All" count="1">
<type fieldname="ID">User Id</type>
<type fieldname="FIRSTNAME">User First Name</type>
<type fieldname="LASTNAME">User Last Name</type>
<type fieldname="MIDDLEINITIAL">User Middle Initial</type>
<type fieldname="ADDRESS1">User Address 1</type>
<type fieldname="ADDRESS2">User Address 1</type>
<type fieldname="CITY">City of User Residence</type>
<type fieldname="STATE">State of User Residence</type>
<type fieldname="PHONENUMBER">User Phone Number</type>
<type fieldname="EMAIL">User Email Address</type>
</data>
</result>
</operation>
</response>
我的目标是获取 data
节点内的节点值列表。我发现以下作品和 returns 10 个元素的列表。
List<string> nodeList = xml.Descendants().Attributes("fieldname").Select(x => x.Value).ToList<string>();
让我感到困惑的是,我试图将 data
节点指定为我应该在其下查找子节点的唯一节点。我刚刚将 "data" 作为 XName
参数添加到 Descendants()
方法中。
List<string> nodeList = xml.Descendants("data").Attributes("fieldname").Select(x => x.Value).ToList<string>();
本例中的结果返回 nodeList
计数为零。我只是想更具体地定义哪些节点应该被 selected 以便 XML 文档中属性名称为 "fieldname" 的其他节点不会被 select除了 <data>
节点的子元素之外的其他元素。我不确定为什么我得到零结果,希望有人能对此有所了解。
我认为后代过滤了数据类型的后代,但没有具有属性的数据后代。 试试这个:
List<string> nodeList = xml.Descendants("data").Descendants().Attributes("fieldname").Select(x => x.Value).ToList<string>();