我是处理XML文档和Microsoft DOM的新手,如果我遗漏了一些明显的内容,我深表歉意。
我有一组XML格式的文档,最终我希望以编程方式进行编辑。作为发现步骤,我试图打开一个文件,并查看如何读取其内容。
以下是我在网上找到的示例,我在Visual Studio 2019中创建了一个控制台项目并编写了几行代码。
文档包含元素“ DataSource”的2个实例,但是方法getElementsByTagName(“ DataSource”)似乎找不到它们。确实,无论我给命令加上什么标签,元素数组的长度总是返回为0。
我在做什么错了?
MY 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>
模块Module1
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
最终模块
答案 0 :(得分:0)
我注意到的一个错误是您的路径"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
希望这会有所帮助。
答案 1 :(得分:0)
元素位于命名空间(http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition
)中,因此您应使用getElementsByTagName(uri, localname)
的两个参数形式来提供命名空间。