문제

내 코드를 DataSet으로 읽어야 하는 .xml 파일이 제공되었습니다(배경으로 파일은 DataSet C# 및 호출 dataSet.WriteXml(file, XmlWriteMode.IgnoreSchema), 그러나 이것은 다른 사람이 수행했습니다).

.xml 파일의 모양은 다음과 같습니다.

 <?xml version="1.0" standalone="yes"?>
 <NewDataSet>
  <Foo>
    <Bar>abcd</Bar>
    <Foo>efg</Foo>
  </Foo>
  <Foo>
    <Bar>hijk</Bar>
    <Foo>lmn</Foo>
  </Foo>
</NewDataSet>

C# 및 .NET 2.0을 사용하여 아래 코드를 사용하여 파일을 읽었습니다.

        DataSet ds = new DataSet();
        ds.ReadXml(file);

중단점을 사용하여 이 후 line ds.Tables[0] 다음과 같습니다(제대로 형식을 지정할 수 없는 밑줄 대신 대시를 사용).

Bar     Foo-Id    Foo-Id-0
abcd     0         null
null     1         0
hijk     2         null
null     3         2

해결 방법이 많이 있다는 것을 알고 있으며 .xml에서 성공적으로 읽을 수 있었지만 그 이유를 알고 싶습니다. ds.ReadXml(file) 이런 방식으로 수행되었으므로 앞으로는 문제를 피할 수 있을 것입니다.감사해요.

도움이 되었습니까?

해결책

이것은 귀하의 의견에 맞는 것 같습니다 중첩된 푸 태그:

<NewDataSet>  
  <Foo>              <!-- Foo-Id: 0 -->
    <Bar>abcd</Bar>
    <Foo>efg</Foo>   <!-- Foo-Id: 1, Parent-Id: 0 -->
  </Foo>
  <Foo>              <!-- Foo-Id: 2 -->
    <Bar>hijk</Bar>
    <Foo>lmn</Foo>   <!-- Foo-Id: 3, Parent-Id: 2 -->
  </Foo>
</NewDataSet>

따라서 이는 "Foo-Id-0"의 상위-하위 키를 사용하여 결과에 올바르게 4개의 레코드가 됩니다.

노력하다:

<NewDataSet>  
  <Rec>              <!-- Rec-Id: 0 -->
    <Bar>abcd</Bar>
    <Foo>efg</Foo>   
  </Rec>
  <Rec>              <!-- Rec-Id: 1 -->
    <Bar>hijk</Bar>
    <Foo>lmn</Foo>   
  </Rec>
</NewDataSet>

결과는 다음과 같습니다.

Bar     Foo        Rec-Id
abcd    efg        0
hijk    lmn        1

다른 팁

이것은 완전한 답변이 아닌 내 관찰입니다.

내 추측으로는(직접 재현하려고 하지 않고) DataSet이 계층 구조를 관계형 데이터 구조로 '평면화'하려고 할 때 몇 가지 일이 발생할 수 있다는 것입니다.

1) 관계형 데이터베이스 관점에서 데이터를 생각합니다.컬렉션의 각 Foo 요소를 식별하기 위한 명확한 기본 키 필드가 없으므로 DataSet은 Foo-Id라는 자동 생성 필드로 파일의 서수 위치를 자동으로 사용했습니다.

2) 실제로는 'Foo'라는 두 요소가 있으므로 'Foo-Id-0' 열에 이상한 이름이 생성된 이유를 설명할 수 있습니다(열에 대한 고유한 이름이 자동 생성되었습니다. 이는 DataSet의 내결함성 동작입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top