kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

DataSetとXML

Webサービスを作っていて、こんなXMLをDataSetで送り返そうとしました。

<Root>
  <Node1>
    <Element code="000">
      <Name>名前1</Name>
    </Element>
    <Element code="001">
      <Name>名前2</Name>
    </Element>
  </Node1>
  <Node2>
    <Element param="File">
      <Name>名前3</Name>
    </Element>
    <Element param="File">
      <Name>名前4</Name>
    </Element>
  </Node2>
</Root>

でこれをこんなコードで読み込んでみると…DataSetが一意制約違反を出してしまう。

  DataSet ds = new DataSet();
  string XmlUri = "http://exsamples.com/data/hoge.xml";
  string XmlSchema = "http://exsamples.com/data/hoge.xsd";
  ds.ReadXmlSchema(XmlSchema);
  ds.ReadXml(XmlUri);

原因はたぶんNode1とNode2の中にNameという同名の要素があるためなのかな。ちょっと考えた。それから、上みたいな適当に書いたXMLでもVisual Studioのメニュー「XMLスキーマの生成」でスキーマを自動生成してくれるのね。VS2008からかと思ったらVS2005にもしっかりあった...。私くらいならこれを使って生成してから改造でも良いかな。