2017-11-28 13 views
0

응용 프로그램에 많은 datatable이 있고 그 중 일부는 xml에서 가져와야합니다. 모든 readxml 함수는 하나만 제외하고는 잘 작동합니다.DataTable에서 스키마 유추를 지원하지 않습니다.

다음은 XML 콘텐츠의 일부입니다.

<dtSysStat> 
    <ST>2017-11-28T21:14:58+03:00</ST> 
    <INST_ID>1</INST_ID> 
    <RM>1.34</RM> 
    <WM>0.04</WM> 
    <RR>86</RR> 
    <WR>2</WR> 
    <TR>0</TR> 
    </dtSysStat> 

다음은 datatable 구조입니다.

여기는 읽기 섹션입니다.

dtSysStatTemp.TableName = "dtSysStat"; 
dtSysStatTemp.ReadXml(AppDomain.CurrentDomain.BaseDirectory + pathnameicustom); 

나는 또한 dtsysstat 데이터 테이블 구조에서이 XML을 작성합니다. 그래서 나는 스키마 구조가 동일하다고 확신합니다.

왜 나는 'DataTable에서 스키마 유추를 지원하지 않습니다'오류가 발생하지 않습니다. 왜냐하면 readxml을 가진 다른 datatable은 완벽하게 작동하기 때문입니다.

난 당신이 예를 들어 당신이 태그에 공백을 해달라고 있는지 확인 데이터 집합

+1

왜 처음에 DataTable을 사용합니까? 강하게 입력 된 객체는 왜 없습니까? – mason

+0

DataSet WriteXml과 DataTable WriteXml간에 약간의 차이가 있습니다. DataSet은 항상 작동합니다. DataTable은 DataTable에 이름이있을 때만 작동합니다. 나에게 왜 냐고 묻지마. DataSet을 읽을 때 첫 번째 레벨 태그는 DataSet 이름입니다. 두 번째 수준 태그는 DataTable 이름입니다. 세 번째 레벨 태그는 열 이름입니다. 네 번째 레벨 태그는 행 데이터입니다. 4 개 이상의 레이어가있는 경우 Net Library는 데이터를 쓸모없는 많은 데이터 테이블로 분할합니다. DataTable과 같은 파일을 읽으려고하면 다중 데이터 테이블을 만들 수 없기 때문에 불가능합니다. – jdweng

답변

1

당신은 데이터 집합을 사용하여 아래에 시도 할 수 있습니다.

DataSet ds = new DataSet(); 
ds.ReadXml("testfile.xml"); 
DataTable dt = ds.Tables["dtSysStat"]; 
return dt.Rows[0]["ST"].ToString(); 

대체 솔루션 (ReadXmlSchema 추가) :

dtSysStatTemp.TableName = "dtSysStat"; 
dtSysStatTemp.ReadXmlSchema(AppDomain.CurrentDomain.BaseDirectory + pathnameicustom); 
dtSysStatTemp.ReadXml(AppDomain.CurrentDomain.BaseDirectory + pathnameicustom); 
+0

데이터 세트를 사용하고 싶지 않습니다. –

+2

사람들은 당신을 도울 수있는 노력과 시간을두고 있습니다. "나는 데이터 세트를 사용하고 싶지 않습니다"라고 생각하는 것은 논평의 대상이 아닙니다. 이유를 설명하십시오. – jonathana

+0

ReadXml 바로 전에 ReadXmlSchema를 사용한다면 차이가 있습니까? 내 대답을 예제로 업데이트했습니다. – Sulphy

0
  1. 를 사용하지 않고이 작업을 수행 할 수 :
    잘못 : <ST> </ST> :<ST> < /ST>올바른.
  2. DataSet이 아닌 DataTable - DataTable은 Xml의 스키마를 지원하지 않습니다.

나는 그것을 테스트 한이 예상대로 작동은 :

private void XmlToDataset() 
{ 
    DataSet dsysStatTemp = new DataSet(); 
    XmlDocument doc = new XmlDocument(); 
    string xmlString = @"<dtSysStat> 
    <ST> 2017 - 11 - 28T21: 14:58 + 03:00 </ST> 
    <INST_ID> 1 </INST_ID> 
    <RM> 1.34 </RM> 
    <WM> 0.04 </WM> 
    <RR> 86 </RR> 
    <WR> 2 </WR> 
    <TR> 0 </TR> 
    </dtSysStat>"; 

    doc.Load(new StringReader(xmlString)); 

    XmlTextReader xtr = new XmlTextReader(doc.OuterXml, XmlNodeType.Element, null); 
    dsysStatTemp.ReadXml(xtr); 
    MessageBox.Show(dsysStatTemp.Tables[0].Rows[0]["ST"].ToString()); 
} 
+0

그러나 나는 데이터 세트를 사용하지 않고 다른 모든 데이터 태블릿을 사용할 수 있습니다. –

+0

귀하의 의견을 이해하지 못했습니다. 또한 사람들이 왜 투표를하지 않았는지 사람들이 설명하기를 바랍니다. – jonathana