Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 为什么getElementsByTagName找不到元素?_Xml_Vba_Dom - Fatal编程技术网

Xml 为什么getElementsByTagName找不到元素?

Xml 为什么getElementsByTagName找不到元素?,xml,vba,dom,Xml,Vba,Dom,我是处理XML文档和Microsoft DOM的新手,如果我遗漏了一些明显的东西,我深表歉意 我有一组XML格式的文档,最终我希望通过编程进行编辑。作为一个发现步骤,我试着打开一个,看看如何阅读它的内容 下面是我在网上找到的示例,我在VisualStudio2019中创建了一个控制台项目,并编写了几行代码 该文档包含元素“DataSource”的两个实例,但getElementsByTagName(“DataSource”)方法似乎找不到它们。实际上,无论我给命令添加什么标记,元素数组的长度总是

我是处理XML文档和Microsoft DOM的新手,如果我遗漏了一些明显的东西,我深表歉意

我有一组XML格式的文档,最终我希望通过编程进行编辑。作为一个发现步骤,我试着打开一个,看看如何阅读它的内容

下面是我在网上找到的示例,我在VisualStudio2019中创建了一个控制台项目,并编写了几行代码

该文档包含元素“DataSource”的两个实例,但getElementsByTagName(“DataSource”)方法似乎找不到它们。实际上,无论我给命令添加什么标记,元素数组的长度总是返回为0

我做错了什么

我的XML如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Report MustUnderstand="df" xmlns="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition" xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner" xmlns:df="http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition/defaultfontfamily">
  <df:DefaultFontFamily>Segoe UI</df:DefaultFontFamily>
  <AutoRefresh>0</AutoRefresh>
  <DataSources>
    <DataSource Name="SharedDataSource">
      <DataSourceReference>QL_Copy</DataSourceReference>
      <rd:SecurityType>None</rd:SecurityType>
      <rd:DataSourceID>801777da-c111-4aa2-b8e9-49ba90f19774</rd:DataSourceID>
    </DataSource>
    <DataSource Name="CustomDataSource">
      <ConnectionProperties>
        <DataProvider>SQL</DataProvider>
        <ConnectString>Data Source=v-citywsql03;Initial Catalog=BE</ConnectString>
        <IntegratedSecurity>true</IntegratedSecurity>
      </ConnectionProperties>
      <rd:SecurityType>Integrated</rd:SecurityType>
      <rd:DataSourceID>dcfb0e9c-06d9-4538-9ec6-1568b32daf3b</rd:DataSourceID>
    </DataSource>
  </DataSources>
  <ReportSections>
    <ReportSection>
      <Body>
        <Height>2in</Height>
        <Style />
      </Body>
      <Width>6.5in</Width>
      <Page>
        <PageHeight>29.7cm</PageHeight>
        <PageWidth>21cm</PageWidth>
        <LeftMargin>2cm</LeftMargin>
        <RightMargin>2cm</RightMargin>
        <TopMargin>2cm</TopMargin>
        <BottomMargin>2cm</BottomMargin>
        <ColumnSpacing>0.13cm</ColumnSpacing>
        <Style />
      </Page>
    </ReportSection>
  </ReportSections>
  <ReportParametersLayout>
    <GridLayoutDefinition>
      <NumberOfColumns>4</NumberOfColumns>
      <NumberOfRows>2</NumberOfRows>
    </GridLayoutDefinition>
  </ReportParametersLayout>
  <rd:ReportUnitType>Cm</rd:ReportUnitType>
  <rd:ReportID>f3bca84a-9587-4ba2-b1ed-57e31a33eb3b</rd:ReportID>
</Report>

结束模块

我可以注意到的一个错误是,您的路径“C:Temp\Report1.xml”中有一个输入错误

如果这不能修复错误,请尝试更改正在创建的
对象的类型,并改用
“microsoft.XMLDOM”

更新代码:

Sub Main()
    Dim ReportFilename As String
    Dim xmlDoc As Object
    Dim xmlSourceList As Object

    ReportFilename = "C:\Temp\Report1.xml"

    xmlDoc = CreateObject("microsoft.XMLDOM")
    xmlDoc.async = False
    xmlDoc.Load(ReportFilename)

    xmlSourceList = xmlDoc.getElementsByTagName("DataSource")
    MsgBox(xmlSourceList.length)

End Sub

希望这有帮助。

我注意到的一个错误是,您的路径中有一个拼写错误
“C:Temp\Report1.xml”

如果这不能修复错误,请尝试更改正在创建的
对象的类型,并改用
“microsoft.XMLDOM”

更新代码:

Sub Main()
    Dim ReportFilename As String
    Dim xmlDoc As Object
    Dim xmlSourceList As Object

    ReportFilename = "C:\Temp\Report1.xml"

    xmlDoc = CreateObject("microsoft.XMLDOM")
    xmlDoc.async = False
    xmlDoc.Load(ReportFilename)

    xmlSourceList = xmlDoc.getElementsByTagName("DataSource")
    MsgBox(xmlSourceList.length)

End Sub

希望这有帮助。

元素位于名称空间(
http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition
)因此您应该使用两个参数形式的
getElementsByTagName(uri,localname)
提供名称空间。

元素位于名称空间中(
http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition
)所以您应该使用两个参数形式的
getElementsByTagName(uri,localname)
提供名称空间。

Visual Studio或VBA?请注意,文件名中可能有一个类型,在
C:`之后缺少一个
`字符。这是在Visual Studio 2019中。我首先在MS Access 2010中尝试对其进行编码,但每次在“Set xmlDoc.asynch=False”时都会出现运行时错误424,不知道是什么原因导致了这种情况,并且在我取出这行代码时无法工作,我猜这是因为其余的代码可以在加载文档之前执行。Visual Studio或VBA?请注意,文件名中可能有一个类型,在
C:`之后缺少一个
`after。这是在Visual Studio 2019中。我首先尝试在MS Acce中对其进行编码ss 2010,但我每次在“Set xmlDoc.asynch=False”时都会出现运行时错误424,无法找出原因,并且在我取出该行时无法工作,我猜是因为其余代码可以在加载文档之前执行。谢谢。:)修复了该问题。结果相同(不客气。如果这不能修复错误,请尝试将该对象实例化为
“microsoft.XMLDOM”
。Result!!我的喜悦几乎无法承受!非常感谢。:)我确信这就是问题所在,因为我也遇到过它。如果这个答案有帮助,请接受它,这样其他人就可以从中受益我试着看看是否同样的东西修复了我的MS密码,但遗憾的是没有。我将不得不把它作为一个新问题发布。再次感谢您的帮助修正了。结果相同(不客气。如果这不能修复错误,请尝试将该对象实例化为
“microsoft.XMLDOM”
。Result!!我的喜悦几乎无法承受!非常感谢。:)我确信这就是问题所在,因为我也遇到过它。如果这个答案有帮助,请接受它,这样其他人就可以从中受益我试着看看是否同样的东西修复了我的MS密码,但遗憾的是没有。我将不得不把它作为一个新问题发布。再次感谢你的帮助。