如何将XML中所有元素的值转换为数组?

时间:2014-08-18 05:15:50

标签: c# arrays xml

例如:

我有以下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中是否有选项可以实现此目的?

P.S。 XML中有近20个标签,并非所有标签都包含值。因此,如果只有一个命令来获取XML的所有值,那么它会很棒。

3 个答案:

答案 0 :(得分:1)

使用Linq to 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();

答案 1 :(得分:0)

首先:您的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
                    });

答案 2 :(得分:0)

您可以通过&#39; XmlElement.ChildNodes&#39;来获取任何父节点的子节点。并将其存储在收藏中。

例如:

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