【问题标题】:How to get the values of all the elements in an XML into an array?如何将 XML 中所有元素的值放入数组中?
【发布时间】:2014-08-18 13:31:07
【问题描述】:

例如:

我有以下 XML,

<?xml version="1.0" encoding="utf-8"?>
<TEST>
<Name>TESTRUN</Name>
<SyncByte>ff</SyncByte>
<SOM>53</SOM>
<PDADD>7e</PDADD>
<LENLSB>08</LENLSB>
</Test>

我想将标签“SyncByte”、“SOM”、“PADD”和“LENLSB”中的值放入一个数组中。 XML 中是否有一个选项可以实现这一点?

附: XML 中有近 20 多个标签,并非所有标签都始终包含值。因此,如果有一个命令可以获取 XML 的所有值,那就太好了。

【问题讨论】:

  • 展示你到目前为止所做的事情?

标签: c# arrays xml


【解决方案1】:

使用 Linq 到 Xml:

    var xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
    <Test>
        <Name>TESTRUN</Name>
        <SyncByte>ff</SyncByte>
        <SOM>53</SOM>
        <PDADD>7e</PDADD>
        <LENLSB>08</LENLSB>
    </Test>";

    var doc = XDocument.Parse(xml);
    string[] values = doc.Root.Descendants().Select(x => x.Value).ToArray();

【讨论】:

    【解决方案2】:

    首先: 您的 xml 格式错误,应该是:

    <?xml version="1.0" encoding="utf-8"?>
    <TEST>
    <Name>TESTRUN</Name>
    <SyncByte>ff</SyncByte>
    <SOM>53</SOM>
    <PDADD>7e</PDADD>
    <LENLSB>08</LENLSB>
    </TEST> <!--END Tag should same as TEST -->
    

    然后你可以像这样查询它们:

    var xml=XDocument.Load("d:\\test.xml");
    var list=xml.Descendants("TEST")
                .Select(x=>new
                        {
                            SyncByte=x.Element("SyncByte")==null?"":x.Element("SyncByte").Value,
                            SOM=x.Element("SOM")==null?"":x.Element("SOM").Value,
                            LENLSB=x.Element("LENLSB")==null?"":x.Element("LENLSB").Value
                        });
    

    【讨论】:

      【解决方案3】:

      您可以通过'XmlElement.ChildNodes'获取任意父节点的子节点并将其存储在集合中。

      例如:

      static int Main(string[] args)
              {
                  string strFilename = "Input.xml";
                  XmlDocument xmlDoc = new XmlDocument();
      
                  if (File.Exists(strFilename))
                  {
                      xmlDoc.Load(strFilename);
                      XmlElement elm = xmlDoc.DocumentElement;
                      XmlNodeList lstVideos = elm.ChildNodes;
      
                      for (int i = 0; i < lstVideos.Count; i++)
                          Console.WriteLine("{0}",lstVideos[i].InnerText );
                  }
                  else
                      Console.WriteLine("The file {0} could not be located",
                                        strFilename);
      
                  Console.WriteLine();
                  return 0;
              }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-25
        • 1970-01-01
        • 2021-09-11
        • 1970-01-01
        • 2021-09-30
        • 1970-01-01
        • 2018-09-27
        • 1970-01-01
        相关资源
        最近更新 更多