如何从xelement中获取一个tablerow?

时间:2015-08-21 11:43:03

标签: c# asp.net vb.net datatable xelement

我有这个xelement:

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

如你所见,元素地址中有几个属性,它继承了包含一些属性的元素分支和语言。

我想要一张这样的桌子:

name street city branchvalue branchkey languagevalue languagekey

我该怎么做?我可以对它进行硬编码,因为xml方案每次都是相同的,但我希望有一个动态而纤薄的解决方案

1 个答案:

答案 0 :(得分:0)

以下是一种实现方法的示例。你真的应该做空检查而不是假设所有属性都带有值,但是如果你可以相信它,那么你可以去:

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

更新

根据新证据...... 我仍然不确定这是否符合您的需求,但您可以动态创建一个词典。从那里你可以用数据做任何你想做的事情:

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

enter image description here