且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何摆脱xelement的麻烦?

更新时间:2023-12-05 22:54:04

这是一种实现方法的示例。您确实应该进行空检查,而不是假设所有属性都存在值,但是如果您可以信任它,就可以这样做:

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

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