How to get a tablerow out of an xelement?

自闭症网瘾萝莉.ら 提交于 2019-12-12 00:29:28

问题


I have this xelement:

<adress name="company1" street="street1" City="city1" <branch key="1" value="branch1" /><language key="1" value="langauge1" /> </adress>

as you see there are several attributes in the element adress and it inherits the elements branch and language which also containing some attributes.

I want a table like this:

name street city branchvalue branchkey languagevalue languagekey

How can I do this? I can hardcode it, because the xml scheme is everytime the same but, i would like to have a dynamic and slim solution


回答1:


Here's an example of one way to do it. You really should do null checking and not assume all attributes are present with values, but if you can trust it, here you go:

    string strElem = "<adress name=\"company1\" street=\"street1\" City=\"city1\"><branch key=\"1\" value=\"branch1\" /><language key=\"1\" value=\"langauge1\" /> </adress>";
    XElement xel = XElement.Parse(strElem);

    var branch = xel.Element("branch");
    var lang = xel.Element("language");

    var theTable = new {
        name = xel.Attribute("name").Value, 
        street = xel.Attribute("street").Value, 
        city = xel.Attribute("City").Value,
        branchkey = branch.Attribute("key").Value,
        branchvalue = branch.Attribute("value").Value,
        languagevalue = lang.Attribute("key").Value,
        languagekey = lang.Attribute("value").Value
        };

Update

In light of new evidence... I'm still not sure if this suits your needs, but you can dynamically create a Dictionary. From there you can do whatever you want with the data:

            string strElem = "<adress name=\"company1\" street=\"street1\" City=\"city1\"><branch key=\"1\" value=\"branch1\" /><language key=\"1\" value=\"langauge1\" /> </adress>";
            XElement xel = XElement.Parse(strElem);

            var theTable = new ExpandoObject() as IDictionary<string, Object>;
            foreach (XAttribute attr in xel.Attributes())
            {
                theTable.Add(attr.Name.LocalName, attr.Value);
            }

            foreach (XElement el in xel.Elements())
            {
                foreach (XAttribute attr in el.Attributes())
                {
                    theTable.Add(el.Name + attr.Name.LocalName, attr.Value);
                }
            }



来源:https://stackoverflow.com/questions/32139449/how-to-get-a-tablerow-out-of-an-xelement

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!