使用xml和c#中的层次结构创建动态对象

时间:2010-08-24 07:26:11

标签: c# xml dynamic

我想从XML字符串创建一个动态对象。这样做有简单的方法吗?

示例字符串。

<test><someElement><rep1>a</rep1><rep1>b</rep1></someElement></test>

我正在尝试创建一个mvc编辑器,用于通过nvelocity传递数据,并希望前端的人输入xml作为解析数据。

提前致谢。

3 个答案:

答案 0 :(得分:0)

你需要做两件事: 1)有效的xml 2)C#类,它具有与输入xml中相同的数据成员。

您需要创建一个C#类对象,然后枚举xml的所有元素,并且当使用switch为每个元素名称时,您可以获取该元素的内部文本属性并将其分配给对象的相应数据成员。 C#代码可能如下所示(您需要填补空白):

class test {
  List<string> someElement;
}

class xmlEnum 
{
 static test createObject(string inputXml) 
 {
     test t = new test();
     // load input xml in XmlDocument class
     // and start iterating thorugh all the elements
     swithc(elementName)
     {
        case rep1:
            t.someElement.add(element.innerText);
            break;
         // some more cases will go here

     }
   // finally return the object;
  return t;
 }
}

我希望这会对你有所帮助。

答案 1 :(得分:0)

我认为没有现成的动态解决方案。如果我理解你的问题,你会想做这样的事情。

SomeDynamicXmlObject test = new SomeDynamicXmlObject(yourteststring);
var rep1 = test.SomeElement.rep1;

我能想到的最接近的就是使用XElement类,如下所示:

XElement test = XElement.Parse(yourteststring);
var rep1 = test.Element("SomeElement").Element("rep1");

如果这还不够好,我担心你必须自己编写一些能解析xml并动态创建对象的东西。如果你事先知道xml会是什么样子,你可以使用shekhars代码,但我想你的评论中你不会这样做。

答案 2 :(得分:0)

如果您有可用的xml架构,并且如果在开发/构建环境中需要这样,那么关于这样做的方法将是

  1. 使用XSD工具解析架构并从中生成代码
  2. 使用命令行编译器或编译器服务构建生成的代码,以便生成。现在你有一个可以使用的类型。 毋庸置疑,这将是一个非常缓慢的,并且将在这里使用过程外的工具。
  3. 另一种(不是一种简单的方法,但速度更快)不具备dev env依赖关系的方法是解析你的xml并使用反射生成动态类型。请参阅this article以查看如何使用Reflection.Emit