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,之后,我尝试检索的任何节点都为空

我究竟做错了什么?

以下是数据集的正常 xml 结构:

普通数据集的 XML 结构

4

1 回答 1

0

没关系,我已经发现了问题。DataSource 节点没有使用前缀命名空间,但它实际上是使用命名空间作为属性。您可以在图像中看到(作为 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 回答