2013-05-02 1 views
0

으로 변환 .NET 4.0 (VS2010)에서 C++/Cli를 사용하여 XML 문서를 사전으로 변환하려고합니다. 이 문서는 다음과 같습니다XML 문서를 사전

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<!-- Created 26-04-2013 09:05 --> 
<DEVICE_CONFIG> 
    <ALL 
     username="bob" 
     features="all" 
    /> 
</DEVICE_CONFIG> 

난 그냥 <의 값에 대해 신경 ALL ... />, 쌍의 시리즈 인 :

키 = "값"

감사

+0

더 많은 샘플 입력을 제공 할 수 있습니까? 이걸로, 기대할 수 있고 신뢰할 수있는 상수 태그가 무엇인지, 그리고 무시해야 할 가변 데이터는 무엇인지 알기가 어렵습니다. –

+0

더 좋습니까? 필자가 제공 한 입력은 모든 키 - 값 쌍을 제외하고 전체 파일입니다. 파일 당 약 30 개의 키 - 값 쌍이 필요합니다. – Stefan

+0

더 많은 키 - 값 쌍을 요구했습니다. 표시된 데이터만으로는 키가 무엇인지, 값이 무엇인지, 출력에는 포함되지 않는 것이 무엇인지 분명하지 않습니다. 사전에 "bob = all"이 아닌 "username = bob", "features = all"을 포함 할 것으로 기대하십니까? –

답변

1
String^ s = 
    "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n" + 
    "<!-- Created 26-04-2013 09:05 -->\r\n" + 
    "<DEVICE_CONFIG>\r\n" + 
    " <ALL\r\n" + 
    "  username=\"bob\"\r\n" + 
    "  features=\"all\"\r\n" + 
    " />\r\n" + 
    "</DEVICE_CONFIG>"; 

XElement^ root = XElement::Parse(s); 

// The DEVICE_CONFIG node is boring. Skip to the "ALL" node. 
XElement^ allNode = dynamic_cast<XElement^>(root->FirstNode); 

Dictionary<String^, String^>^ results = gcnew Dictionary<String^, String^>(); 
for each(XAttribute^ attribute in allNode->Attributes()) 
{ 
    results->Add(attribute->Name->ToString(), attribute->Value); 
} 

난 그냥 뿌리가 무엇이든의 내부 요소에 건너 뛰는거야. 다른 방법으로 "모든"노드를 찾을 수 있습니다. HasAttributes이라는 XElement를 찾을 때까지 반복하고 name 등으로 "전체"를 검색 할 수 있습니다.

+0

감사. System :: Xml :: Linq에 대한 참조를 프로젝트에 추가해야했습니다. 이제 빌드가 완료됩니다. – Stefan