user12008088
user12008088

Reputation:

vb6 extract all matched title using a string

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&apos; - 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

Answers (2)

&#201;tienne Laneville
&#201;tienne Laneville

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&apos; - 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

wqw
wqw

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

Related Questions