簡體   English   中英

從子節點查詢xml父節點屬性

[英]Querying xml parent node attribute from child node

我正在使用與此類似的xml:

<?xml version="1.0" encoding="utf-8"?>
<Results>
  <Pattern Name="Substitution">
    <TestList>
      <Test>
        <Inputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Inputs>
        <Outputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Outputs>
      </Test>
      <Test>
        <Inputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Inputs>
        <Outputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Outputs>
      </Test>
    </TestList>
  </Pattern>
  <Pattern Name="MinMax">
    <TestList>
      <Test>
        <Inputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Inputs>
        <Outputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Outputs>
      </Test>
      <Test>
        <Inputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Inputs>
        <Outputs>
          <Variable Name="A" Value="-1" />
          <Variable Name="B" Value="20" />
        </Outputs>
      </Test>
    </TestList>
  </Pattern>
</Results>

我正在使用linq和excel interop將測試中的值寫入Excel工作表。

var tests = from test in document.Descendants("Test").Descendants("Inputs")
            select new
            {
                inputNames = test.Elements("Variable").Attributes("Name")
            };

foreach (var test in tests)
{
    valueRow = valueMatch.Row;

    foreach (var inputName in test.inputNames)
    {
        if (valueSection.Find(inputName.Value, Missing.Value, Missing.Value, XlLookAt.xlWhole) != null)
        {
             workSheetTwo.Cells[valueRow, valueColumn] = inputName.NextAttribute.Value;                       
             ++valueRow;
        }
    }

    ++valueColumn;
}

將值寫入Excel工作表可以正常工作,但是我還需要根據其下的圖案名稱使用不同的單元格背景色來編寫值。(例如,如果圖案名稱為“ Substitution”,則為藍色;如果圖案名稱為=,則為黃色“MINMAX”)。 是否有可能從“ inputName”獲取模式名稱的值? 我嘗試使用inputName.Parent.Element("Pattern").Attribute("Name").Value ..但這會返回異常。 正確的方法是什么? 任何幫助,將不勝感激。 提前致謝。

您很親近,而不是像Element("Pattern")調用Ancestors("Pattern").First()這樣的...

inputName.Parent.Ancestors("Pattern").First().Attribute("Name").Value
var tests = from p in xdoc.Descendants("Pattern")
            from input in p.Descendants("Test").Elements("Inputs")
            select new {
                Pattern = p.Attribute("Name").Value,
                Variables = input.Elements("Variable").Attributes("Name") };

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM