【问题标题】:How to get a tablerow out of an xelement?如何从 xelement 中获取 tablerow?
【发布时间】:2015-08-21 11:43:02
【问题描述】:

我有这个 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 方案每次都是相同的,但是我希望有一个动态且苗条的解决方案

【问题讨论】:

  • 你有没有尝试过?还有为什么你的标签中有 C# 和 vb.net。
  • 现在我创建了一个表,对列进行硬编码并将每个 element.attribute 放入他的列中。也许我的问题很模糊。我想知道框架中是否已经存在一种方法来做我想做的事。
  • 否则我需要努力编写自己的方法。

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


【解决方案1】:

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

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

【讨论】:

  • 这是我不明白的硬编码和我已经拥有的。我想要一种动态方法,其中属性名称可以更改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
  • 2015-05-23
  • 1970-01-01
相关资源
最近更新 更多