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

本文关键字:转换 数组 元素 XML | 更新日期: 2023-09-27 18:18:30

例如:

我有以下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"answers"LENLSB"中获取值到单个数组中。在XML中是否有一个选项来实现这一点?

注:XML中有近20多个标记,并不是所有标记都始终包含值。因此,如果有一个命令来获取XML的所有值,那就太好了。

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

With 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();

第一:您的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
                    });

您可以通过'XmlElement '获得任何父节点的子节点。

for example:

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