За последние 24 часа нас посетили 17690 программистов и 1723 робота. Сейчас ищут 882 программиста ...

Парсинг XML и подщет ключей

Тема в разделе "PHP для новичков", создана пользователем xak2, 3 фев 2008.

  1. xak2

    xak2 Guest

    Есть двухступенчатый xml (Прайс лист), 1 ступень категории товаров, например:

    Код (Text):
    1. [1]
    2.     [0]
    3.         [name]
    4.         [id]
    5.     [1]
    6.         [name]
    7.         [id]
    8.     [2]
    9.         [name]
    10.         [id]
    11. [2]
    12.     [0]
    13.         [name]
    14.         [id]
    15.     [1]
    16.         [name]
    17.         [id]
    Так вот надо собрать все теги [id] из последней ступени, проблема заключается в том, что такой же идентификатор присутствует и в первой ступени, как бы:
    Код (Text):
    1. <category>
    2.      <name>TVs</name>
    3.      <id>1</id>
    4.      <products>
    5.           <name>TVs</name>
    6.           <id>1</id>
    7.      </products>
    8. </category>
     
  2. xak2

    xak2 Guest

    Вот часть прайс листа:

    Извиняюсь за беспорядок :{

    HTML:
    1. <?xml version="1.0"?>
    2. <root> <application> <name>acp</name> <language>lv</language> <module>components</module> <submodule>index</submodule> <error/> </application> <components> <item> <id>32592</id> <code>1</code> <group/> <groupId>0</groupId> <name>1</name> <vendor/> <vendorId/> <itemPrice>0</itemPrice> <packPrice>0</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>0</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item> <subgroup> <name> CCD camera without lens</name> <id>2803</id> <item> <id>32590</id> <code>vgcrc202</code> <group> </group> <groupId>307</groupId> <name>SONY</name> <vendor>Corsair</vendor> <vendorId>812</vendorId> <itemPrice>0</itemPrice> <packPrice>0</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>0</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item> <item> <id>32589</id> <code>vgcrc202.cek</code> <group> </group> <groupId>307</groupId> <name>SONY DESKTOP VGC-RC202,PentiumD 920 2.8Ghz,GF 6600</name> <vendor>Corsair</vendor> <vendorId>812</vendorId> <itemPrice>0</itemPrice> <packPrice>0</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>0</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item> </subgroup> <subgroup> <name>Battery chargers</name> <id>1822</id> <item> <id>33858</id> <code>02NBBC33368EU</code> <group>Accessories</group> <groupId>83</groupId> <name>Kensington 4-in-1 Car Charger for iPod</name> <vendor>NB</vendor> <vendorId>847</vendorId> <itemPrice>17.5</itemPrice> <packPrice>17.5</packPrice> <packItems>1</packItems> <stock>2</stock> <date/> <warranty>12</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>1</new> <packPresent>0</packPresent> </special> </item> <item> <id>35886</id> <code>02NBBC33185EU</code> <group>Accessories</group> <groupId>83</groupId> <name>Kensington Digital FM Transmitter/Auto Charger for iPod</name> <vendor>NB</vendor> <vendorId>847</vendorId> <itemPrice>36.5</itemPrice> <packPrice>36.5</packPrice> <packItems>1</packItems> <stock>1</stock> <date/> <warranty>12</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>1</new> <packPresent>0</packPresent> </special> </item> </subgroup> <subgroup> <name>MULTIPORTS</name> <id>1824</id> <item> <id>2412</id> <code>02iwmpcr-i530rw</code> <group>Accessories</group> <groupId>83</groupId> <name>InWin CR-i530 WHITE Internal Card Reader/USB2.0/Audio/1934/retail/20vnt./dz.</name> <vendor>InWin</vendor> <vendorId>252</vendorId> <itemPrice>10</itemPrice> <packPrice>10</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>12</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item> </subgroup> <subgroup> <name>HDD Racks</name> <id>1825</id> <item> <id>18145</id> <code>02dgHDda50214</code> <group>Accessories</group> <groupId>83</groupId> <name>DIGITUS DA50214, SATA Haard Drive Removable Frame</name> <vendor>DIGITUS</vendor> <vendorId>339</vendorId> <itemPrice>6.8</itemPrice> <packPrice>6.8</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>12</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item> <item> <id>33558</id> <code>02dgHDDA-70407-1</code> <group>Accessories</group> <groupId>83</groupId> <name>DIGITUS DA-70407-1 SB, 2.5 drive case, USB2</name> <vendor>DIGITUS</vendor> <vendorId>339</vendorId> <itemPrice>6.5</itemPrice> <packPrice>6.5</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>12</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>1</price> <bundle>0</bundle> <action>1</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item> <item> <id>27128</id> <code>02dgHDDA-70514-1</code> <group>Accessories</group> <groupId>83</groupId> <name>DIGITUS DA-70514-1, External HDD Enclosure 3.5, S-ATA, USB 2.0 </name> <vendor>DIGITUS</vendor> <vendorId>339</vendorId> <itemPrice>30</itemPrice> <packPrice>30</packPrice> <packItems>1</packItems> <stock>0</stock> <date/> <warranty>12</warranty> <reserved>0</reserved> <ordered>0</ordered> <cart>0</cart> <special> <price>0</price> <bundle>0</bundle> <action>0</action> <present>0</present> <new>0</new> <packPresent>0</packPresent> </special> </item>
     
  3. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    ну и в чём проблема? о_0
     
  4. xak2

    xak2 Guest

    Есть деревянный мост, но отсутствуют некоторые части, как их собрать в единое?

    Покажи мне пример с выше упомянутым хмлом... я даж не знаю как эт осделать
    :(
     
  5. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
  6. xak2

    xak2 Guest

    Я сделал...

    PHP:
    1. preg_match_all('/<item> <id>(.*)<\/id> <code>/Usi', $content, $products_id, PREG_SET_ORDER);
     
  7. dark-demon

    dark-demon Активный пользователь

    С нами с:
    16 фев 2007
    Сообщения:
    1.920
    Симпатии:
    1
    Адрес:
    леноград
    а если придёт
    HTML:
    1. <components> <item>  <code>1</code> <id>32592</id>
    ?
     
  8. RomanBush

    RomanBush Активный пользователь

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    Помойму этот xml очень легко разбирается вот этим, хотя, конечно, для повышения квалификации и общей крутости организма нада использовать регулярники.