0

わかりました、これがあまり混乱しないことを願っています。

ロシアの小売業者から YML 形式のフィードが提供されました。これを読んでデータベースに入力する必要があります。私は以前に YML を使用したことがなく、正直に言うと、それが何であるか、または XML とどのように異なるかをよく理解していません (私たちは使用することを好みますが、残念ながら小売業者はこの形式でそれを提供しません)。YML ファイルの読み方を Google で試してみましたが、提供されたファイルが似ていない YAML しか見つかりませんでした。

YMlを見つけることができなかったので、XMLとしてダウンロードして読み取ろうとしましたが、次の行が追加されました。

<!DOCTYPE yml_catalog SYSTEM "shops.dtd">

このため、ノードを読み取ることができません。この行を手動で削除してから、目的のノードを正常に読み取ることができます。

ファイルのスニペットを次に示します。

ダウンロード前:

<yml_catalog date="2013-08-28 14:50">
<shop>
<name>DomProm.ru</name>
<company>DomProm.ru</company>
<url>http://www.domprom.ru</url>
<currencies>
<currency id="RUB" rate="1"/>
<currency id="USD" rate="33.4"/>
<currency id="EUR" rate="37.1"/>
</currencies>
<categories>
<category id="28">Крупная бытовая техника</category>
<category id="29" parentId="28">Стиральные машины</category>   
</categories>
<offers>
<offer id="27232" type="vendor.model" available="true">

ダウンロード後:

<?xml version="1.0" encoding="windows-1251"?><!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="2013-08-28 17:00">
<shop>
<name>DomProm.ru</name>
<company>DomProm.ru</company>
<url>http://www.domprom.ru</url>
<currencies>
<currency id="RUB" rate="1"/>
<currency id="USD" rate="33.4"/>
<currency id="EUR" rate="37.1"/>
</currencies>
<categories>
<category id="28">Êðóïíàÿ áûòîâàÿ òåõíèêà</category>
<category id="29" parentId="28">Ñòèðàëüíûå ìàøèíû</category>
<category id="30" parentId="28">Ïîñóäîìîå÷íûå ìàøèíû</category>
<category id="31" parentId="28">Õîëîäèëüíèêè/Ìîðîçèëüíûå êàìåðû/Âèííûå øêàôû</category>
</categories>
<offers>
<offer id="27232" type="vendor.model" available="true">

これを読むために私が使用しているコードの一部を次に示します。

var document = new XmlDocument();

            try
            {
                // and load it with the contents of that file
                document.Load(downloadFileName);
            }
            catch (Exception ex)
            {
                _keepItDry.WriteToEventLog(ex);
                // Trying to catch what is going on while the progrem is trying to load the downloaded file
                _keepItDry.AddTolistBox(DateTime.Now.ToLongDateString() + DateTime.Now.ToLongTimeString() + " Error loading the file for " + scrape.Retailer.Description + " : " + ex.Message + " " + ex.StackTrace, _listBoxLog);
        }



 var domPromNodes = document.SelectNodes("//yml_catalog//shop//offers/offer");
                    if (domPromNodes != null)
                    {
                        foreach (XmlNode node in domPromNodes)
                        {
                            var title = "No Title"; var price = "No Price"; var modelNo = "No ModelNo"; var sku = "No Sku"; var inStock = "No Instock";
                            var deeplink = "No Deeplink"; var imageUrl = "No ImageUrl"; var brand = "No Brand";

doctype 行が取り出された場合 var domPromNodes = document.SelectNodes("//yml_catalog//shop//offers/offer"); 結果を返します。それ以外の場合は失敗します。

YML を使用するためのヘルプやポインタをいただければ幸いです。または、削除または無視する方法を教えてください

ありがとう

4

1 に答える 1