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