如何读取YML提要-如果读取为XML,则忽略DOCType
本文关键字:读取 XML 如果 DOCType 何读取 提要 YML | 更新日期: 2023-09-27 18:29:16
好吧,我希望这不会太令人困惑。
一家俄罗斯零售商向我们提供了YML格式的提要,我需要阅读并输入到我的数据库中。我以前没有使用过YML,老实说,我真的不知道它是什么,也不知道它与XML有什么不同(我们更喜欢使用它,但不幸的是,零售商不会以这种格式提供它)。我试过在谷歌上搜索如何读取YML文件,但我遇到的只是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。选择节点("//yml_catalog//shop//proveres");返回结果,否则失败。
任何与YML有关的帮助或指针,或删除或忽略
THanks
为了忽略使我无法看到节点的doctype,我添加了以下内容:
XmlDocument doc = new XmlDocument();
doc.LoadXml(Regex.Replace(File.ReadAllText(downloadFileName), "<!DOCTYPE.+?>", string.Empty));
因此,这删除了DOCTYPE行,因此允许我读取节点