2010-08-24 4 views
2

XML 문자열에서 동적 객체를 만들고 싶습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?xml 및 c에서 계층 구조가있는 동적 객체 만들기 #

예제 문자열.

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

나는 nvelocity을 통해 데이터를 전달하는 MVC 편집기를 만들려고 해요 및 분석을위한 데이터가 같은 입력 XML에 대한 프론트 엔드에 사람을 싶습니다.

미리 감사드립니다.

+0

문자열의 모양은 어떻습니까? – abatishchev

+3

예. (귀하가 귀하의 질문에서했던 것과 동일한 수준의 세부 사항을 제공합니다) – Grzenio

+0

달성 방법에 대한 의견이 있으십니까? – RubbleFord

답변

0

접근 방식을 약간 변경했으며 xml 주위에 래퍼를 작성한 다음 nvelocity 엔진으로 전달합니다. 치료를하고 있어요.

0

1) 유효한 xxx 2) 입력 xml과 동일한 데이터 멤버가있는 C# 클래스.

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

나는이 당신을 도움이되기를 바랍니다.

+0

그럴 경우 전혀 역동적이지 않습니다 ... –

+0

당신을위한 건배는 도움이되지만 나는 그것이 역동적 일 필요가 있습니다. – RubbleFord

0

저는 기성 동적 솔루션이 있다고 생각하지 않습니다. 귀하의 질문을 정확하게 이해하면 다음과 같은 일을하고 싶습니다. 그 충분하지 있다면

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

, 당신이해야 할 것 같군요 : 나는 당신이 생각할 수있는 가장 가까운 것을 얻을 수

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

는 XElement를 클래스, 이런 식으로 뭔가를 사용하는 것입니다 xml을 파싱하고 해당 객체를 즉석에서 작성하는 무언가를 직접 작성하십시오. xml이 어떻게 보이는지 미리 아는 경우 shekhars 코드를 사용할 수 있습니다. 그러나 주석을 사용하면 그렇지 않습니다.

+0

개체를 직접 루프해야한다고 생각합니다. – RubbleFord

+0

Alexandra Rusina가 작성한이 블로그 게시물을 살펴보십시오. http://blogs.msdn.com/b/csharpfaq/archive/2009/10/19/dynamic-in-c-4-0-creating-wrappers-with -dynamicobject.aspx 본격적인 솔루션은 아니지만 시작부터 시작할 수 있습니다. –

+0

"저는 기성 동적 솔루션이 있다고 생각하지 않습니다." 지금 있습니다 : https://github.com/jonathanconway/XmlToDynamic. :) – Jonathan

0

사용 가능한 XML에 대한 스키마를 가지고이이 디바이스에 필요한 경우/다음 할 수있는 방법에 대한 라운드 환경을 구축 할 경우,이 그것에서 코드를 스키마를 분석하고 생성하는

  1. 사용 XSD 도구가 될 것입니다
  2. assmebly를 생성하기 위해 명령 행 컴파일러 또는 컴파일러 서비스를 사용하여 생성 된 코드를 빌드하십시오. 이제 사용할 수있는 유형이 있습니다. 아주 느리고 out-of-proc 도구가 여기에 사용됩니다.

dev env 종속성이없는 또 다른 방법 (쉬운 방법은 아니지만 빠른 방법)은 XML을 구문 분석하고 리플렉션을 사용하여 동적 유형을 생성하는 것입니다. Reflection.Emit 사용 방법을 확인하려면 this article을 참조하십시오.

+0

나는 이런 식으로 생각했다. 그러나 사용자에게 충분히 유연하거나 쉽지는 않다. – RubbleFord

+0

"쉽지 않은"부분에 동의하지만 유연하지는 않을지 확신하지 못합니다. – VinayC

+0

나는 두 번째 접근법을 시도하고있다. 그러나 xml 속성이 what..any 아이디어로 매핑 될지는 모른다. –