0

私はVB.netでXMLを使って遊んでいますが、これはC#で行う方法とはかなり異なり、ノードをトラバースする方が自然です。次に、名前空間に出くわします。

まず、次のようなインポートを使用しました。

Imports <xmlns:mstns="http://tempuri.org/myDataSet.xsd">
Imports <xmlns="http://tempuri.org/MyDataSet.xsd">
Imports <xmlns:xs="http://www.w3.org/2001/XMLSchema">
Imports <xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
Imports <xmlns:msprop="urn:schemas-microsoft-com:xml-msprop">

次に、次のようにTableAdapterノードにアクセスしようとしました。

  Dim doc As XDocument

  Dim tableAdapters As XElement

  doc = XDocument.Load(file.FullName)

 tableAdapters = (From item As XElement In doc.<xs:schema>.
                                               <xs:annotation>.
                                               <xs:appinfo>.
                                               <DataSource>. 
                                               <Tables>.
                                               <TableAdapter>
                                               Select item).FirstOrDefault()

[改行は無視してください。読みやすくするためだけに行いました]

xs:appinfoまでノードを正しく取得できます。その後、取得しようとするノードはnullになります。

私は何が間違っているのですか?

以下は、データセットの通常のxml構造です。

通常のデータセットのXML構造

4

1 に答える 1

0

気にしないでください、私はすでに問題を見つけました。DataSource ノードはプレフィックス名前空間を使用していませんでしたが、実際には名前空間を AS AN ATTRIBUTE として使用していました。画像で(xmlnsとして)それを見ることができます。

それを解決するには、次のようにします。

ノード内の属性として見つかった xmlns の名前空間を持つ別のインポートを追加します。

Imports <xmlns:datasource="urn:schemas-microsoft-com:xml-msdatasource">

次に、次のように取得します。

        tableAdapters = (From item As XElement In doc.<xs:schema>.
                                                     <xs:annotation>.
                                                     <xs:appinfo>.
                                                      <datasource:DataSource>.
                                                    <datasource:Tables>.
                                                    <datasource:TableAdapter> 
                          Select item).FirstOrDefault()
于 2012-11-23T09:09:21.850 に答える