2012-01-27 3 views
0
<row> 
    <id>1</id> 
    <code></code> 
    <name></name> 
    <address></address> 
    <state></state> 
    <zone>?</zone> 
</row> 
<row> 
    <id>2</id> 
    <code>AA</code> 
    <name>Ataria</name> 
    <address>Sitapur National Highway 24, Uttar Pradesh</address> 
    <state>Uttar Pradesh</state> 
    <zone>NER</zone> 
</row> 

이 xml 파일에서만 행 요소가 없습니다. 행 요소는이 xml 파일을 시작하고 종료합니다. 이러한 유형의 데이터를 역 직렬화하는 방법은 무엇입니까? in C#이 유형의 XML 파일을 역 직렬화하는 방법은 무엇입니까?

답변

0

처음에는 XML 파일 인 이 아니고이 아니거나 최소한 XML 문서를 나타내지는 않습니다.

하나의 옵션은 이 문서의 시작/끝 태그가 ... 다음은 일반 문서로로드 할 수 있습니다 않는 파일로 파일을 복사하는 것입니다. 파일을 작성하고, 문서 시작 태그를 작성하고,이 파일의 내용을 복사 한 다음, 문서 종료 태그를 작성하고, 파일 핸들을 닫으십시오. 당신도 이것을 메모리에서 할 수 있습니다.

또는 일 수 있습니다. 즉, XmlReader을 통해 조각으로 읽을 수 있습니다. 내가 한 일이라고 말할 수는 없으며 일반적으로 전체 XML 파일을 만드는 것이 좋습니다. 더 익숙한 영역에있을 것입니다. 당신이 루트를 누락하여 XML 만 한 문제가 있는지 확인하는 경우

4

- 단지 수동으로 추가 :

string fileContent = File.ReadAllText(path); 
string rawXml = "<root>" + fileContent + "</root>"; 

// now you can use LINQ-to-XML or whatever 
XDocument xdoc = XDocument.Load(rawXml); 
+0

큰 파일에는주의하십시오. 그래서 저는 케빈 캐스 카트의 대답을 훨씬 더 좋아합니다. – Clemens

+0

'File.ReadAllText'는 대답의 요점이 아닙니다. 요점은 수동으로 루트 요소를 만듭니다. – sll

+0

질문은이 XML 단편을 읽는 것이지 루트 요소를 추가하는 방법이 아닙니다 .-) – Clemens

0

의 아닌 XML 파일은 루트가없는 경우. 파서가 구문 분석을 시도하면 오류가 발생합니다. 이런 식으로 할 수 있습니다

<?xml version="1.0"?> 
<Root> 
--- add your file content here 
</Root> 

다음이 파일 경로를 파서에 제공하십시오.

1

는 또한 당신은 XElement.Load(...)reader.ReadSubTree()의 결과를 전달하여 XElement의를 만들 것

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.ConformanceLevel = ConformanceLevel.Fragment; 

using (XmlReader reader = XmlReader.Create("tracelog.xml", settings)) 
{ 
    while (reader.Read()) 
    { 
     // Process each node of the fragment, 
     // possibly using reader.ReadSubtree() 
    } 
} 

를 통해 직접 XML 조각을로드 할 수 있습니다.

관련 문제