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にもしっかりあった...。私くらいならこれを使って生成してから改造でも良いかな。