0
我正在嘗試搜索我的XML文檔中的字符串,並且想要返回其祖先標記名稱以跟蹤它。遞歸搜索XML字符串並返回XML標記名稱
當前在我的代碼中,輸入XML路徑和字符串,並返回標記名稱echo
。
但我想一些修改它:
- 我希望用戶選擇目錄,代碼應該處理目錄下的所有XML文件。
- 代碼應搜索XML文件中文本的所有出現位置。
- 它應該以可讀格式返回信息,如字符串的表格格式,幷包含標籤名稱。
我現在的代碼在下面給出,它具有文本值和XML路徑硬編碼,它回聲每個標籤名稱。
Dim oFS : Set oFS = CreateObject("Scripting.FileSystemObject")
Dim sFSpec : sFSpec = oFS.GetAbsolutePathName("xyz.xml")
Dim objMSXML : Set objMSXML = CreateObject("Msxml2.DOMDocument")
objMSXML.setProperty "SelectionLanguage", "XPath"
objMSXML.async = False
objMSXML.load sFSpec
If 0 = objMSXML.parseError Then
Dim sXPath : sXPath = "//*[local-name()='namespace']/*[local-name()='querySubject']/*[local-name()='queryItem'][contains(., 'SearchTerm')]/ancestor-or-self::*/*[local-name()='name']"
'//namespace//querySubject/queryItem[contains(.,'searchTerm')]/ancestor-or-self::*/name
Dim querySubject : Set querySubject = objMSXML.selectSingleNode(sXPath)
If querySubject Is Nothing Then
WScript.Echo sXPath, "failed"
Else
For Each node In objMSXML.selectNodes(sXPath)
WScript.Echo node.text
Next
End If
Else
WScript.Echo objMSXML.parseError.reason
End If
示例XML是:
<project xmlns = "https://afdsl/skdflsk/d">
<name>Abcpos</name>
<property name="included" type="hidden">true</property>
<locales>
<locale>en</locale>
<locale>de</locale>
</locales>
<defaultLocale>en</defaultLocale>
<namespace>
<name locale="en">Abcpos</name>
<name locale="de">Abcpos</name>
<lastChanged>2015-04-06T17:37:40</lastChanged>
<lastChangedBy>userx</lastChangedBy>
<property name="included" type="hidden">true</property>
<namespace>
<name locale="en">Database Layer</name>
<querySubject status="valid">
<name locale="en">qskxyz</name>
<queryItem>
<name locale="en">qixyz</name>
<hello>searchTerm</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
<namespace>
<name locale="en">Names</name>
<lastChanged>2016-01-12T12:42:46</lastChanged>
<namespace>
<name locale="en">Database Layer</name>
<querySubject status="valid">
<name locale="en">qsxyz</name>
<queryItem>
<name locale="en">myName</name>
<hello>...Hi there..</hello>
</queryItem>
</querySubject>
</namespace>
</namespace>
</project>