snono/stream-parser

此包的最新版本(dev-master)没有可用的许可信息。

将xml、json、csv内容转换为数组

dev-master 2019-11-19 19:09 UTC

This package is not auto-updated.

Last update: 2024-10-02 19:40:19 UTC


README

Build Status Total Downloads Latest Stable Version License

Laravel框架的Stream解析器

注意: 此存储库包含将XML文件转换为数组的核心代码。

安装

composer require snono/stream-parser

推荐用法

尽可能将回调执行委托出去,以避免阻塞文档读取

实际输入/代码/输出示例

XML

<Products Version="1.00">
    <Product>
        <ProductId>31774</ProductId>
        <Name><![CDATA[Giliola Mor Pembe Detaylı Çocuk Spor Ayakkabı]]></Name>
        <ShortDescription/>
        <MetaTitle>Giliola Mor Pembe Detaylı Çocuk Spor Ayakkabı</MetaTitle>
        <SKU>ANT-CCK-CSP-133124</SKU>
        <Gtin>3177431774317</Gtin>
        <AlisFiyati>40.00</AlisFiyati>
        <Price>40.00</Price>
        <Published>True</Published>
        <ProductCombinations>
            <ProductCombination>
                <ProductCombinationId>...</ProductCombinationId>
                <SKU>...</SKU>
                <Gtin>3031774317743</Gtin>
                <StockQuantity>...</StockQuantity>
                <ProductAttributes>...</ProductAttributes>
            </ProductCombination>
            <ProductCombination>
                <ProductCombinationId>1782578</ProductCombinationId>
                <SKU>ANT-CCK-CSP-133124</SKU>
                <Gtin>3331774317743</Gtin>
                <StockQuantity>0</StockQuantity>
                <ProductAttributes>
                    <ProductAttribute>
                        <Name>Çocuk Numara</Name>
                        <Value>33</Value>
                    </ProductAttribute>
                </ProductAttributes>
            </ProductCombination>
        </ProductCombinations>
        <Pictures>
            <Picture>
                <PictureUrl>https://www.xmlcim.com/image/catalog/erbilden/Y5Lnj9L9HVD15ciAS1r2xkSAospZcG3Qmk1fY.jpg</PictureUrl>
            </Picture>
            <Picture>
                <PictureUrl>https://www.xmlcim.com/image/catalog/erbilden/FOnQWf6dPYqTDSDqhMcUhwSIIHoI57oolYj1V.jpg</PictureUrl>
            </Picture>
        </Pictures>
        <Categories>
            <Category>
                <CategoryId>288</CategoryId>
                <Name>Çocuk Spor</Name>
                <CategoryPath>...</CategoryPath>
            </Category>
        </Categories>
        <Manufacturers>
            <Manufacturer>
                <Id>7</Id>
                <Name><![CDATA[Erbilden]]></Name>
            </Manufacturer>
        </Manufacturers>
        <ProductSameColors/>
    </Product>
</Products>
    use Snono\StreamParser\XMLParser;

    $objXML = new XMLParser();
    $arr =  $objXML->setUrl('https:///product.xml')
                   ->xmlParser()
                   ->mapping(
                        array(
                                'Products' => array(
                                    'Product' => array(
                                                'id_product' => 'ProductId',
                                                'sku' => 'SKU',
                                                'qty' => 'StockQuantity',
                                                'title' => 'MetaTitle',
                                                'images' => 'Pictures.Picture.PictureUrl',
                                                'category' => 'Categories.Category.CategoryId:Name:CategoryPath',
                                                'manufacturer' => 'Manufacturers.Manufacturer',
                                                'productCombinations' => 'ProductCombinations.ProductCombination.StockQuantity:SKU:ProductCombinationId:ProductAttributes',
                                    )
                                )
                            )
                        )
                   ->toArray();
[
  {
    "id_product": "31774",
    "sku": "ANT-CCK-CSP-133124",
    "qty": "7",
    "title": "Giliola Mor Pembe Detaylı Çocuk Spor Ayakkabı",
    "images": [
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/Y5Lnj9L9HVD15ciAS1r2xkSAospZcG3Qmk1fY.jpg"
      },
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/FOnQWf6dPYqTDSDqhMcUhwSIIHoI57oolYj1V.jpg"
      },
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/4JYDn1jVXJdLHaUaQ11QyX0rQjLOHk4seRfF3.jpg"
      },
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/k6oVbvFRlxd3SdQCCcZLovODTi4V5xkZutrzj.jpg"
      }
    ],
    "category": {
      "CategoryId": "288",
      "Name": "Çocuk Spor",
      "CategoryPath": "Çocuk Ayakkabı &gt;&gt; Çocuk Spor"
    },
    "manufacturer": {
      "Id": "7",
      "Name": "Erbilden"
    },
    "productCombinations": [
      {
        "ProductCombinationId": "1782575",
        "SKU": "ANT-CCK-CSP-133124",
        "Gtin": "3031774317743",
        "StockQuantity": "1",
        "ProductAttributes": {
          "ProductAttribute": {
            "Name": "Çocuk Numara",
            "Value": "30"
          }
        }
      }
    ]
  },
  {
    "id_product": "31763",
    "sku": "ANT-CCK-CSP-133113",
    "qty": "7",
    "title": "Giliola Mor Çocuk Spor Ayakkabı ",
    "images": [
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/xvspaJFco5uFRGJtjf3LG6wtVCWtQVYsENuBy.jpg"
      },
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/UfLqiVkJi6XzuBEdgGfZuxtfuHcLSJhlsgN3U.jpg"
      },
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/vR0fTLvE69rmScPQQ062z0kxp8oQzNMyHVUtG.jpg"
      },
      {
        "PictureUrl": "https://www.xmlcim.com/image/catalog/erbilden/T5tphhfeCTYvFc5NzWVqHDB8XVRXJkWOYTOIw.jpg"
      }
    ],
    "category": {
      "CategoryId": "288",
      "Name": "Çocuk Spor",
      "CategoryPath": "Çocuk Ayakkabı &gt;&gt; Çocuk Spor"
    },
    "manufacturer": {
      "Id": "7",
      "Name": "Erbilden"
    },
    "productCombinations": [
      {
        "ProductCombinationId": "1782515",
        "SKU": "ANT-CCK-CSP-133113",
        "Gtin": "2631763317633",
        "StockQuantity": "1",
        "ProductAttributes": {
          "ProductAttribute": {
            "Name": "Çocuk Numara",
            "Value": "26"
          }
        }
      }
    ]
  }
]

数据源两种类型

使用以下代码从URL链接获取数据

    $objXML->setUrl('https:///product.xml');

或从本地文件加载数据

    $objXML->setFileName('./tmp/product.xml');

返回所有数据而不进行映射

    $arr = $objXML->getContent();