访问XML中的属性/节点

时间:2020-05-18 18:25:17

标签: c# xml

我尝试读取一些XML,然后将特定信息写入控制台,我的XML文件位于https://aaronlilly.github.io/demo/demo.xml

或也在此处列出:

<DogCenter xmlns="http://schema.dogsite.com/xsi">
  <dogActiveState>Available</dogActiveState>
  <useDefaultGuardDog>false</useDefaultGuardDog>
  <enableGuardDog>true</enableGuardDog>
  <guardTimerSeconds>7</guardTimerSeconds>
  <useDogOther>true</useDogOther>
  <forceHumanToPlay>true</forceHumanToPlay>
  <forceDogInCrate>false</forceDogInCrate>
  <forceDogFoodLimit>true</forceDogFoodLimit>
  <numberConsecutiveBallsBounce>4</numberConsecutiveBallsBounce>
  <makeBarkingNoiseIfMailMan>true</makeBarkingNoiseIfMailMan>
  <outgoingDogCenter>
    <TrainerId>Alpha</TrainerId>
    <name>Argoni</name>
  </outgoingDogCenter>
  <dogCenterList>
    <centerDetails>
      <TrainerId>Bingo</TrainerId>
      <available>true</available>
      <tagNumber>80</tagNumber>
      <extension>8</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>12</dogLevel>
    </centerDetails>
    <centerDetails>
      <TrainerId>Case</TrainerId>
      <available>true</available>
      <tagNumber>93</tagNumber>
      <extension>1</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>12</dogLevel>
    </centerDetails>
    <centerDetails>
      <TrainerId>Buddy</TrainerId>
      <available>false</available>
      <tagNumber>60</tagNumber>
      <extension>82</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>12</dogLevel>
    </centerDetails>
    <callCenterDetails>
      <TrainerId>Apex</TrainerId>
      <available>true</available>
      <extension>83</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>3</dogLevel>
    </centerDetails>
    <centerDetails>
      <TrainerId>Marle</TrainerId>
      <available>false</available>
      <tagNumber>37</tagNumber>
      <extension>5</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>3</dogLevel>
    </centerDetails>
    <cnterDetails>
      <TrainerId>Arrow</TrainerId>
      <available>true</available>
      <extension>84</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>5</dogLevel>
    </centerDetails>
    <centerDetails>
      <TrainerId>Aaron</TrainerId>
      <available>true</available>
      <extension>64</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
    </centerDetails>
    <centerDetails>
      <TrainerId>AlphaAlternate</TrainerId>
      <available>true</available>
      <extension>65</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
    </centerDetails>
    <centerDetails>
      <TrainerId>Monkey</TrainerId>
      <available>false</available>
      <tagNumber>64</tagNumber>
      <extension>14</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>3</dogLevel>
    </centerDetails>
    <centerDetails>
      <TrainerId>Mona</TrainerId>
      <available>true</available>
      <tagNumber>05</tagNumber>
      <extension>85</extension>
      <isLogOffAllowed>false</isLogOffAllowed>
      <dogLevel>12</dogLevel>
    </centerDetails>
  </dogCenterList>
</DogCenter>

我想写的是示例

TrainerID = Bingo , Available = True, dogLevel = 12;

对于每个TrainerId(例如,宾果游戏,顶点游戏,蒙娜丽莎)

到目前为止,我所得到的是这个

XmlElement elem = (XmlElement)doc.DocumentElement.FirstChild;
Console.Write("{0} = {1}", elem.Name, elem.InnerText);

哪个写dogActiveState = Available ;

我尝试了for循环

for (int x = 0; x < elem.ChildNodes.Count; x++)
{
    Console.WriteLine("{0} = {1}"",elem.Name, elem.InnerXml);
}

for (int x = 0; x < elem.ChildNodes.Count; x++)
{
    Console.WriteLine("{x}={x+1}",elem.Name, elem.InnerXml);
}

但是我还没有完全掌握语法。

1 个答案:

答案 0 :(得分:0)

您可以使用XmlDocument.GetElementsByTagName获取callCenterDetails元素,并使用XmlNode indexer访问其子元素。 这是一个示例:

var doc = new XmlDocument();
doc.Load("demo.xml");
var callCenterDetails = doc.GetElementsByTagName("callCenterDetails");
for (var i = 0; i < callCenterDetails.Count; i++)
{
    var trainerId = callCenterDetails[i]["TrainerId"].InnerText;
    // ...
}