Reputation:
i will like to extract all the titles only by searching from a string and if it matches in multipul places then all the match title should be added to text2 multi line.
so search for a string sf2_06.bin and it matches in few places below so it should bring me the titles.
please bare in mind that the data is larger then this
sf2j
sf2ja
sf2jc
i was wondering if anybody can kindly show me how this is done thank you so much.
<game name="sf2j" cloneof="sf2" romof="sf2">
<description>Street Fighter II - The World Warrior (Japan 911210)</description>
<year>1991</year>
<manufacturer>Capcom</manufacturer>
<rom name="sf2_05.bin" merge="sf2_05.bin" size="524288" crc="ba529b4f" sha1="520840d727161cf09ca784919fa37bc9b54cc3ce"/>
<rom name="sf2_06.bin" merge="sf2_06.bin" size="524288" crc="22c9cc8e" sha1="b9194fb337b30502c1c9501cd6c64ae4035544d4"/>
<rom name="sf2_07.bin" merge="sf2_07.bin" size="524288" crc="4b1b33a8" sha1="2360cff890551f76775739e2d6563858bff80e41"/>
<rom name="sf2_08.bin" merge="sf2_08.bin" size="524288" crc="57213be8" sha1="3759b851ac0904ec79cbb67a2264d384b6f2f9f9"/>
<rom name="sf2_09.bin" merge="sf2_09.bin" size="65536" crc="a4823a1b" sha1="7b6bf59dfd578bfbbdb64c27988796783442d659"/>
<rom name="sf2_14.bin" merge="sf2_14.bin" size="524288" crc="14b84312" sha1="2eea16673e60ba7a10bd4d8f6c217bb2441a5b0e"/>
<rom name="sf2_15.bin" merge="sf2_15.bin" size="524288" crc="2c7e2229" sha1="357c2275af9133fd0bd6fbb1fa9ad5e0b490b3a2"/>
<rom name="sf2_16.bin" merge="sf2_16.bin" size="524288" crc="5e9cd89a" sha1="f787aab98668d4c2c54fc4ba677c0cb808e4f31e"/>
<rom name="sf2_17.bin" merge="sf2_17.bin" size="524288" crc="b5548f17" sha1="baa92b91cf616bc9e2a8a66adc777ffbf962a51b"/>
<rom name="sf2_18.bin" merge="sf2_18.bin" size="131072" crc="7f162009" sha1="346bf42992b4c36c593e21901e22c87ae4a7d86d"/>
<rom name="sf2_19.bin" merge="sf2_19.bin" size="131072" crc="beade53f" sha1="277c397dc12752719ec6b47d2224750bd1c07f79"/>
<rom name="sf2_24.bin" merge="sf2_24.bin" size="524288" crc="c1befaa8" sha1="a6a7f4725e52678cbd8d557285c01cdccb2c2602"/>
<rom name="sf2_25.bin" merge="sf2_25.bin" size="524288" crc="994bfa58" sha1="5669b845f624b10e7be56bfc89b76592258ce48b"/>
<rom name="sf2_26.bin" merge="sf2_26.bin" size="524288" crc="0627c831" sha1="f9a92d614e8877d648449de2612fc8b43c85e4c2"/>
<rom name="sf2_27.bin" merge="sf2_27.bin" size="524288" crc="3e66ad9d" sha1="9af9df0826988872662753e9717c48d46f2974b0"/>
<rom name="sf2_29a.bin" merge="sf2_29a.bin" size="131072" crc="bb4af315" sha1="75f0827f4f7e9f292add46467f8d4fe19b2514c9"/>
<rom name="sf2_36a.bin" merge="sf2_36a.bin" size="131072" crc="c02a13eb" sha1="b807cc495bff3f95d03b061fc629c95f965cb6d8"/>
<rom name="sf2j28.bin" size="131072" crc="d283187a" sha1="5ea83d2652e43e46b831b614d1fe06d465bac9a3"/>
<rom name="sf2j30.bin" size="131072" crc="79022b31" sha1="b7cfe0498260cdd2779580c47829dd02435ffff4"/>
<rom name="sf2j31.bin" size="131072" crc="fe15cb39" sha1="383478524881ea70d9e04c9b6143b8735b637eee"/>
<rom name="sf2j35.bin" size="131072" crc="d28158e4" sha1="bf2bca6068e374011afa95e99809d262f522df18"/>
<rom name="sf2j37.bin" size="131072" crc="516776ec" sha1="4f8b63c4d4265a105751fa72b50bd0fa538bf881"/>
<rom name="sf2j38.bin" size="131072" crc="38614d70" sha1="39c58096f3a8e01fb439639b742b83102bbaa7f6"/>
</game>
<game name="sf2ja" cloneof="sf2" romof="sf2">
<description>Street Fighter II - The World Warrior (Japan 910214)</description>
<year>1991</year>
<manufacturer>Capcom</manufacturer>
<rom name="sf2_05.bin" merge="sf2_05.bin" size="524288" crc="ba529b4f" sha1="520840d727161cf09ca784919fa37bc9b54cc3ce"/>
<rom name="sf2_06.bin" merge="sf2_06.bin" size="524288" crc="22c9cc8e" sha1="b9194fb337b30502c1c9501cd6c64ae4035544d4"/>
<rom name="sf2_07.bin" merge="sf2_07.bin" size="524288" crc="4b1b33a8" sha1="2360cff890551f76775739e2d6563858bff80e41"/>
<rom name="sf2_08.bin" merge="sf2_08.bin" size="524288" crc="57213be8" sha1="3759b851ac0904ec79cbb67a2264d384b6f2f9f9"/>
<rom name="sf2_09.bin" merge="sf2_09.bin" size="65536" crc="a4823a1b" sha1="7b6bf59dfd578bfbbdb64c27988796783442d659"/>
<rom name="sf2_14.bin" merge="sf2_14.bin" size="524288" crc="14b84312" sha1="2eea16673e60ba7a10bd4d8f6c217bb2441a5b0e"/>
<rom name="sf2_15.bin" merge="sf2_15.bin" size="524288" crc="2c7e2229" sha1="357c2275af9133fd0bd6fbb1fa9ad5e0b490b3a2"/>
<rom name="sf2_16.bin" merge="sf2_16.bin" size="524288" crc="5e9cd89a" sha1="f787aab98668d4c2c54fc4ba677c0cb808e4f31e"/>
<rom name="sf2_17.bin" merge="sf2_17.bin" size="524288" crc="b5548f17" sha1="baa92b91cf616bc9e2a8a66adc777ffbf962a51b"/>
<rom name="sf2_18.bin" merge="sf2_18.bin" size="131072" crc="7f162009" sha1="346bf42992b4c36c593e21901e22c87ae4a7d86d"/>
<rom name="sf2_19.bin" merge="sf2_19.bin" size="131072" crc="beade53f" sha1="277c397dc12752719ec6b47d2224750bd1c07f79"/>
<rom name="sf2_24.bin" merge="sf2_24.bin" size="524288" crc="c1befaa8" sha1="a6a7f4725e52678cbd8d557285c01cdccb2c2602"/>
<rom name="sf2_25.bin" merge="sf2_25.bin" size="524288" crc="994bfa58" sha1="5669b845f624b10e7be56bfc89b76592258ce48b"/>
<rom name="sf2_26.bin" merge="sf2_26.bin" size="524288" crc="0627c831" sha1="f9a92d614e8877d648449de2612fc8b43c85e4c2"/>
<rom name="sf2_27.bin" merge="sf2_27.bin" size="524288" crc="3e66ad9d" sha1="9af9df0826988872662753e9717c48d46f2974b0"/>
<rom name="sf2_28a.bin" size="131072" crc="4009955e" sha1="7842dbef7650485639fbae49b9f4db7494d4f73d"/>
<rom name="sf2_29a.bin" merge="sf2_29a.bin" size="131072" crc="bb4af315" sha1="75f0827f4f7e9f292add46467f8d4fe19b2514c9"/>
<rom name="sf2_30a.bin" size="131072" crc="57bd7051" sha1="5e211e75b1649b07723cabc03cf15636dbbae595"/>
<rom name="sf2_31a.bin" size="131072" crc="a673143d" sha1="e565f0ec23d6deb543c72af5a83f070c07319477"/>
<rom name="sf2_35a.bin" size="131072" crc="8c1f3994" sha1="5e1d334399d05a837c2d80f79eada543e83afaf7"/>
<rom name="sf2_36a.bin" merge="sf2_36a.bin" size="131072" crc="c02a13eb" sha1="b807cc495bff3f95d03b061fc629c95f965cb6d8"/>
<rom name="sf2_38a.bin" size="131072" crc="4c2ccef7" sha1="77b119c70c255622b023de25d9af3b3aac52ea47"/>
<rom name="sf2j_37a.bin" size="131072" crc="1e1f6844" sha1="c80e5ac6a6cea39511c38e31ea55b6cd3888024f"/>
</game>
<game name="sf2jc" cloneof="sf2" romof="sf2">
<description>Street Fighter II - The World Warrior (Japan 910306)</description>
<year>1991</year>
<manufacturer>Capcom</manufacturer>
<rom name="sf2_05.bin" merge="sf2_05.bin" size="524288" crc="ba529b4f" sha1="520840d727161cf09ca784919fa37bc9b54cc3ce"/>
<rom name="sf2_06.bin" merge="sf2_06.bin" size="524288" crc="22c9cc8e" sha1="b9194fb337b30502c1c9501cd6c64ae4035544d4"/>
<rom name="sf2_07.bin" merge="sf2_07.bin" size="524288" crc="4b1b33a8" sha1="2360cff890551f76775739e2d6563858bff80e41"/>
<rom name="sf2_08.bin" merge="sf2_08.bin" size="524288" crc="57213be8" sha1="3759b851ac0904ec79cbb67a2264d384b6f2f9f9"/>
<rom name="sf2_09.bin" merge="sf2_09.bin" size="65536" crc="a4823a1b" sha1="7b6bf59dfd578bfbbdb64c27988796783442d659"/>
<rom name="sf2_14.bin" merge="sf2_14.bin" size="524288" crc="14b84312" sha1="2eea16673e60ba7a10bd4d8f6c217bb2441a5b0e"/>
<rom name="sf2_15.bin" merge="sf2_15.bin" size="524288" crc="2c7e2229" sha1="357c2275af9133fd0bd6fbb1fa9ad5e0b490b3a2"/>
<rom name="sf2_16.bin" merge="sf2_16.bin" size="524288" crc="5e9cd89a" sha1="f787aab98668d4c2c54fc4ba677c0cb808e4f31e"/>
<rom name="sf2_17.bin" merge="sf2_17.bin" size="524288" crc="b5548f17" sha1="baa92b91cf616bc9e2a8a66adc777ffbf962a51b"/>
<rom name="sf2_18.bin" merge="sf2_18.bin" size="131072" crc="7f162009" sha1="346bf42992b4c36c593e21901e22c87ae4a7d86d"/>
<rom name="sf2_19.bin" merge="sf2_19.bin" size="131072" crc="beade53f" sha1="277c397dc12752719ec6b47d2224750bd1c07f79"/>
<rom name="sf2_24.bin" merge="sf2_24.bin" size="524288" crc="c1befaa8" sha1="a6a7f4725e52678cbd8d557285c01cdccb2c2602"/>
<rom name="sf2_25.bin" merge="sf2_25.bin" size="524288" crc="994bfa58" sha1="5669b845f624b10e7be56bfc89b76592258ce48b"/>
<rom name="sf2_26.bin" merge="sf2_26.bin" size="524288" crc="0627c831" sha1="f9a92d614e8877d648449de2612fc8b43c85e4c2"/>
<rom name="sf2_27.bin" merge="sf2_27.bin" size="524288" crc="3e66ad9d" sha1="9af9df0826988872662753e9717c48d46f2974b0"/>
<rom name="sf2_28c.bin" size="131072" crc="6eddd5e8" sha1="62bd1c2fc0321809421c9a592f691b5b1a1d8807"/>
<rom name="sf2_29a.bin" merge="sf2_29a.bin" size="131072" crc="bb4af315" sha1="75f0827f4f7e9f292add46467f8d4fe19b2514c9"/>
<rom name="sf2_30c.bin" size="131072" crc="8add35ec" sha1="b08428ff262ca4feddd3c72058b4b674a5401aba"/>
<rom name="sf2_31c.bin" size="131072" crc="c4fff4a9" sha1="4b593ace201fe7f5a00b5cd7f4e8fc3f8dd4ceed"/>
<rom name="sf2_35c.bin" size="131072" crc="6bcb404c" sha1="b5f24556c633c521aadd94e016d78db6922e3dfa"/>
<rom name="sf2_36a.bin" merge="sf2_36a.bin" size="131072" crc="c02a13eb" sha1="b807cc495bff3f95d03b061fc629c95f965cb6d8"/>
<rom name="sf2_38c.bin" size="131072" crc="8210fc0e" sha1="7d6cfb99afa89d0e6e991d9f7c1808b740def125"/>
<rom name="sf2j_37c.bin" size="131072" crc="0d74a256" sha1="587fd0ee1c2ef54554237486eb5b0d1ec30c2868"/>
</game>
<game name="sf2koryu" cloneof="sf2ce" romof="sf2ce">
<description>Street Fighter II' - Champion Edition (Kouryu)</description>
<year>1992</year>
<manufacturer>bootleg</manufacturer>
<rom name="s92_01.bin" merge="s92_01.bin" size="524288" crc="03b0d852" sha1="f370f25c96ad2b94f8c53d6b7139100285a25bef"/>
<rom name="s92_02.bin" merge="s92_02.bin" size="524288" crc="840289ec" sha1="2fb42a242f60ba7e74009b5a90eb26e035ba1e82"/>
<rom name="s92_03.bin" merge="s92_03.bin" size="524288" crc="cdb5f027" sha1="4c7d944fef200fdfcaf57758b901b5511188ed2e"/>
<rom name="s92_04.bin" merge="s92_04.bin" size="524288" crc="e2799472" sha1="27d3796429338d82a8de246a0ea06dd487a87768"/>
<rom name="s92_05.bin" merge="s92_05.bin" size="524288" crc="ba8a2761" sha1="4b696d66c51611e43522bed752654314e76d33b6"/>
<rom name="s92_06.bin" merge="s92_06.bin" size="524288" crc="e584bfb5" sha1="ebdf1f5e2638eed3a65dda82b1ed9151a355f4c9"/>
<rom name="s92_07.bin" merge="s92_07.bin" size="524288" crc="21e3f87d" sha1="4a4961bb68c3a1ce15f9d393d9c03ecb2466cc29"/>
<rom name="s92_08.bin" merge="s92_08.bin" size="524288" crc="befc47df" sha1="520390420da3a0271ba90b0a933e65143265e5cf"/>
<rom name="s92_09.bin" merge="s92_09.bin" size="65536" crc="08f6b60e" sha1="8258fcaca4ac419312531eec67079b97f471179c"/>
<rom name="s92_10.bin" merge="s92_10.bin" size="524288" crc="960687d5" sha1="2868c31121b1c7564e9767b9a19cdbf655c7ed1d"/>
<rom name="s92_11.bin" merge="s92_11.bin" size="524288" crc="978ecd18" sha1="648a59706b93c84b4206a968ecbdc3e834c476f6"/>
<rom name="s92_12.bin" merge="s92_12.bin" size="524288" crc="d6ec9a0a" sha1="ed6143f8737013b6ef1684e37c05e037e7a80dae"/>
<rom name="s92_13.bin" merge="s92_13.bin" size="524288" crc="ed2c67f6" sha1="0083c0ffaf6fe7659ff0cf822be4346cd6e61329"/>
<rom name="s92_18.bin" merge="s92_18.bin" size="131072" crc="7f162009" sha1="346bf42992b4c36c593e21901e22c87ae4a7d86d"/>
<rom name="s92_19.bin" merge="s92_19.bin" size="131072" crc="beade53f" sha1="277c397dc12752719ec6b47d2224750bd1c07f79"/>
<rom name="u195.rom" size="131072" crc="c95e4443" sha1="28417dee9ccdfa65b0f4a92aa29b90279fe8cd85"/>
<rom name="u196.rom" size="524288" crc="b23a869d" sha1="24247d412f20d069919cc8a7fff208af3f7aa1d2"/>
<rom name="u221.rom" size="131072" crc="64e6e091" sha1="32ec05db955e538d4ada26d19ee50926f74b684f"/>
<rom name="u222.rom" size="524288" crc="9236a79a" sha1="39c47b0b0ca2f5f569ff07ebb91040b95d0cb43b"/>
</game>
Upvotes: 0
Views: 100
Reputation: 5031
@wqw provided the perfect succinct answer but if you are not familiar with XPath, you can look for the data manually by looping through the game
and rom
nodes:
Option Explicit
Private Function Search(ByVal xml As String, ByVal romName As String) As String
Dim objDocument As New MSXML2.DOMDocument
Dim objRoot As MSXML2.IXMLDOMNode
Dim objGameNode As MSXML2.IXMLDOMNode
Dim objRomNode As MSXML2.IXMLDOMNode
Dim sResults As String
' Load XML into DOM Document
objDocument.loadXML xml
' Get Root (top-most) element
Set objRoot = objDocument.DocumentElement
' Initalize return value
sResults = ""
' Loop through all Games and Roms
For Each objGameNode In objRoot.childNodes
For Each objRomNode In objGameNode.childNodes
If objRomNode.nodeName = "rom" Then
' Check ROM name
If objRomNode.Attributes.getNamedItem("name").nodeValue = romName Then
' Add game to return list
sResults = sResults & objGameNode.Attributes.getNamedItem("name").nodeValue & vbCrLf
End If
End If
Next
Next
Search = sResults
End Function
Private Sub cmdSearch_Click()
' I added your XML in a txtGames textbox and added a txtSearch textbox
txtResults.Text = Search(txtGames.Text, txtSearch.Text)
End Sub
This is basically doing the same as what @wqw's XPath statement does but is perhaps easier to walk through.
Make sure you have a single top-most element element. The XML you provided will not be accepted by the XML parser. Overall structure should look like this:
<games>
<game name="sf2jc" cloneof="sf2" romof="sf2">
<description>Street Fighter II - The World Warrior (Japan 910306)</description>
<year>1991</year>
<manufacturer>Capcom</manufacturer>
<rom name="sf2_05.bin" merge="sf2_05.bin" size="524288" crc="ba529b4f" sha1="520840d727161cf09ca784919fa37bc9b54cc3ce"/>
<rom name="sf2_38c.bin" size="131072" crc="8210fc0e" sha1="7d6cfb99afa89d0e6e991d9f7c1808b740def125"/>
<rom name="sf2j_37c.bin" size="131072" crc="0d74a256" sha1="587fd0ee1c2ef54554237486eb5b0d1ec30c2868"/>
</game>
<game name="sf2koryu" cloneof="sf2ce" romof="sf2ce">
<description>Street Fighter II' - Champion Edition (Kouryu)</description>
<year>1992</year>
<manufacturer>bootleg</manufacturer>
<rom name="s92_01.bin" merge="s92_01.bin" size="524288" crc="03b0d852" sha1="f370f25c96ad2b94f8c53d6b7139100285a25bef"/>
<rom name="u221.rom" size="131072" crc="64e6e091" sha1="32ec05db955e538d4ada26d19ee50926f74b684f"/>
<rom name="u222.rom" size="524288" crc="9236a79a" sha1="39c47b0b0ca2f5f569ff07ebb91040b95d0cb43b"/>
</game>
</games>
Upvotes: 2
Reputation: 11991
Try something like this
Option Explicit
Private Sub Form_Load()
Dim oRoot As Object
Dim oNode As Object
With CreateObject("MSXML2.DOMDocument")
.Load "d:\temp\aaa.xml"
Set oRoot = .DocumentElement
End With
For Each oNode In oRoot.SelectNodes("//rom[@name='sf2_06.bin']")
Debug.Print oNode.ParentNode.Attributes.GetNamedItem("name").Text
Next
End Sub
Upvotes: 3