首页 > 解决方案 > 为什么 getElementsByTagName 找不到元素?

问题描述

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

我有一组 XML 格式的文档,最终我想以编程方式进行编辑。作为一个发现步骤,我试图打开一个并查看如何阅读其内容。

根据我在网上找到的示例,我在 Visual Studio 2019 中创建了一个控制台项目并编写了几行代码。

该文档包含元素“DataSource”的 2 个实例,但方法 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>

模块模块1

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

    ReportFilename = "C:Temp\Report1.xml"

    xmlDoc = CreateObject("MSXML2.DOMDocument.6.0")
    xmlDoc.async = False
    xmlDoc.Load(ReportFilename)

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

End Sub

端模块

标签: xmlvbadom

解决方案


我注意到的一个错误是您的 Path 中有一个错字"C:Temp\Report1.xml"

如果这不能解决错误,请尝试更改您正在创建和使用的类型Object"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

希望这可以帮助。


推荐阅读