簡體   English   中英

使用XML文件中的單獨元素

[英]Use Separate Elements From XML File

在下面的XML文件中,需要一起使用的元素在XElements之間分解。 (這是我無法控制的)。 例如,我想將ToolVersionResult結合使用。

<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>

我知道如何從這篇文章中選出最深的孩子,但這一步一步地進行了迭代。 在上面的示例中,我可能需要ToolVersionResult ,但是然后需要返回LicensingStatus ,然后從我停下來的地方接起。 (代碼不需要顯式忽略Result ,因為我可以在switch語句中忽略它。

這可能嗎?

將其解析為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

您可以在W3Schools XPath Tutorial中了解有關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;

注意,這假定所有引用的元素都存在。

您可以遍歷所有DiagReport元素,然后從LicensingDataHealth中選擇所需的值。

在此示例中,它們只是存儲在一個匿名對象中,但是您可以創建自己需要的類型化對象。

  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);
  }

暫無
暫無

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

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