鉴于以下XML(Excel XML数据表中的两行),我想查找所有 Cost 值并找到关联的 AltID
...
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s62"><Data ss:Type="String" AltID="1" ColumnHeader="AltName">Alternative 2</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="Number" ColumnHeader="Total">0.105468638</Data></Cell>
<Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Cost">123</Data></Cell>
<Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Risk">456</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0">
<Cell ss:StyleID="s62"><Data ss:Type="String" AltID="2" ColumnHeader="AltName">Alternative 3</Data></Cell>
<Cell ss:StyleID="s62"><Data ss:Type="Number" ColumnHeader="Total">1.7803949999999999</Data></Cell>
<Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Cost">123</Data></Cell>
<Cell ss:StyleID="s64"><Data ss:Type="Number" ColumnHeader="Risk">456</Data></Cell>
</Row>
...
我可以很容易地找到成本,但我需要找到一种方法来说明,用这个给定的成本,去&#34; up&#34; 行的级别,然后找到 ColumnHeader 等于AltName的单元格,然后给我 AltID 属性。
Dim costs = From item In dg...<Table>...<Row>...<Cell>...<Data> Select item Where item.@ColumnHeader = "Cost"
For Each i In costs
dim CostValue as Integer = i.value
dim AltID as Integer = ...
Next
答案 0 :(得分:0)
您无需执行三点来浏览每个元素。三点是.Descendents的简写。您可以将此简化为dg ...只要您不关心数据节点所在的层次结构中的位置。获得所需节点后,可以使用Parent向上导航图形,然后根据需要再次向下返回。这应该为您提供给定节点的AltID属性:
Dim costs = From item In dg...<Data>
Where item.@ColumnHeader = "Cost"
select item.Parent.Parent...<Data>.
FirstOrDefault(Function(node) node.Attribute("ColumnHeader").Value = "AltName").@AltID
或者,您可以使用Ancestors而不是.Parent.Parent来实现相同的目标。请参阅http://www.dbtalks.com/uploadfile/a7e1c8/linq-to-xml-axis-methods-part-1-ancestors-and-ancestorsands/。