1

以下の XML ファイルでは、一緒に使用する必要がある要素が の間に分割されていXElementsます。(これは私の制御を超えています)。ToolVersionたとえば、と組み合わせて使用​​したいと思いResultます。

<DiagReport>
<LicensingData>
  <ToolVersion>6.3.9431.0</ToolVersion>
  <LicensingStatus>SL_LICENSING</LicensingStatus>
</LicensingData>
<Health>
  <Result>PASS</Result>
  <TamperedItems></TamperedItems>
</Health>
<Genuine>
  <ServerProps>GenuineId</ServerProps>
</Genuine>
</DiagReport>

この投稿から最も深い子を取得する方法は知っていますが、これは 1 つずつ繰り返されます。上の例では、 と が必要かもしれませんがToolVersionResultに戻ってLicensingStatus中断したところから再開する必要があります。(コードで明示的に ignore する必要はありません。ステートメントResultでそれを無視できるからです。switch

これは可能ですか?

4

2 に答える 2

5

それを XmlDocument に解析し、必要な値を XPath で取得します。

XmlDocument xml = new XmlDocument();
xml.LoadXml(yourXmlString);
string toolVersion = xml.SelectSingleNode("/DiagReport/LicensingData/ToolVersion").InnerText;
string result = xml.SelectSingleNode("/DiagReport/Health/Result").InnerText

XPath の詳細については、W3Schools XPath チュートリアルを参照してください。

または、XDocument を使用できます。

XDocument xml = XDocument.Parse(yourXmlString);
string toolVersion = xml.Element("DiagReport").Element("LicensingData").Element("ToolVersion").Value;
string result = xml.Element("DiagReport").Element("Health").Element("Result").Value;

これは、参照された要素がすべて存在することを前提としていることに注意してください。

于 2013-07-09T00:56:12.560 に答える
2

すべてのDiagReport要素をループして、必要な値を選択するLicensingDataだけHealthです。

この例では、匿名オブジェクトに格納されているだけですが、独自の型付きオブジェクトを作成することができます。

  var xmlDocument = XDocument.Load(@"C:\test.xml");
  var results = xmlDocument.Elements("DiagReport").Select(x => new 
  {
      ToolVersion = x.Descendants("ToolVersion").FirstOrDefault().Value,
      LicensingStatus = x.Descendants("LicensingStatus").FirstOrDefault().Value,
      Result = x.Descendants("Result").FirstOrDefault().Value
  });

  // print results
  foreach (var item in results)
  {
      Console.WriteLine("ToolVersion: {0}, LicensingData: {1}, Result: {2}", item.ToolVersion, item.LicensingStatus, item.Result);
  }
于 2013-07-09T02:10:45.747 に答える