【发布时间】:2021-11-27 12:13:43
【问题描述】:
我开始说我正在使用 C# 和 .net core 5 开发异步 Web api 应用程序。
此应用程序需要读取一个 XML 文件,给出“ok”响应(异步模式),然后将值返回给我,以便将它们插入数据库。
我写了一个这样的算法来读取节点列表,但我不知道为什么它不能正确地遍历 nodeList...
public class LetturaXml
{
public List<InsertClassDTO> xmlToList(InputDTO input)
{
List<InsertClassDTO> list = new List<AnnuncioAutoDTO>();
XmlDocument doc = new XmlDocument();
doc.Load(input.filePath);
XmlNodeList nodeList = doc.SelectNodes("//ITEM[@CATEGORYID=10]");
foreach (XmlNode item in nodeList)
{
//.... tranfert into DTO, then into list, and finally insert into DB for every iteration
}
}
}
感谢大家的帮助!
附言
xml 示例:
<ITEM ID="5331" CITYID="7" CATEGORYID="10" LASTUPDATE="2021-05-14" EXPIRED="0">
<ISTAT>000</ISTAT>
<TITLE><![CDATA[title]]></TITLE>
<TEXT>
<![CDATA[text]]>
</TEXT>
<EMAIL>@hotmail.it</EMAIL>
<ATTRIBUTELIST>
<ATTRIBUTE>
<ATTRID>prezzo</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[3400]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>telagenzia</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[33333333333]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>contattotelefonico</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[33333333333]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>2</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>4</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>indirizzoagenzia</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>comuneagenzia</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>capagenzia</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>inserzionistaauto</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>tipocomprovendo</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>inserzionistaauto</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>marca</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>modello</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>condizioneveicolo</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>km</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>immatricolazione</ATTRID>
<ATTRNAME></ATTRNAME>
<ATTRVAL><![CDATA[example]]></ATTRVAL>
</ATTRIBUTE>
<ATTRIBUTE>
<ATTRID>alimentazione</ATTRID>
<ATTRNAME><![CDATA[example]]></ATTRNAME>
<ATTRVAL></ATTRVAL>
</ATTRIBUTE>
</ATTRIBUTELIST>
<IMAGELIST>
<IMGFILE><![CDATA[exampleLink.jpg]]></IMGFILE>
</IMAGELIST>
</ITEM>
【问题讨论】:
-
如果您在快速观看中运行
doc.SelectNodes("//ITEM[@CATEGORYID=10]"),会显示什么?您还可以将input.filePath的 XML 数据添加到问题中吗? -
selectNodes 显示我想要的,匹配 xpath exp 的项目。同时我把我从方法中得到的一个项目的例子放在帖子的开头
-
我只需要使用 foreach 从这种类型的节点中获取一些(不是全部)数据(例如 CDATA 或属性)
标签: c# xml asp.net-core xpath