0

次の XML (Excel XML データシートの 2 つの行) が与えられた場合、すべての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>
...

Costs は簡単に見つけることができますが、この与えられたコストを使用して、Rowまでレベルを「上げ」、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
4

1 に答える 1

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

あるいは、.Parent.Parent ではなく祖先を使用して、同じ目標を達成できる場合があります。http://www.dbtalks.com/uploadfile/a7e1c8/linq-to-xml-axis-methods-part-1-ancestors-and-ancestorsands/を参照してください。

于 2012-09-24T17:36:58.393 に答える