我想从下面的XML
中获取元素ROW
的所有属性数组
<?xml version="1.0" encoding="windows-1251"?>
<DATAPACKET Version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.seavus.com/AML/XML-Schema/CTR_Single.xsd">
<banka>
<!-- banka children -->
</banka>
<METADATA>
<FIELDS>
<!-- Fields -->
</FIELDS>
<PARAMS LCID="0" />
</METADATA>
<ROWDATA>
<ROW BANK_ID="370" AKTIVNOST_SE_VRSI_VO_19="Г" NAZIV_21="XXXXX" SEDISTE_21="XX" DANOCEN_BROJ_21="12333" BROJ_SMETKA_21="123333" BANKA_21="330" DATUM_22="03.01.2017" CAS_22="13:30" VID_AKTIV_23="XXX" IZNOS_24="12" VALUTA_24="807" DATUM_25="04.01.2017"
VREME_25="12:55" SIFRA_26="800" OPIS_27="XXXXXXX" />
</ROWDATA>
</DATAPACKET>
要清楚,我想从这个节点创建一个数组:
<ROW BANK_ID="370" AKTIVNOST_SE_VRSI_VO_19="Г" NAZIV_21="XXXXX" SEDISTE_21="XX" DANOCEN_BROJ_21="12333" BROJ_SMETKA_21="123333" BANKA_21="330" DATUM_22="03.01.2017" CAS_22="13:30" VID_AKTIV_23="XXX" IZNOS_24="12" VALUTA_24="807" DATUM_25="04.01.2017"
VREME_25="12:55" SIFRA_26="800" OPIS_27="XXXXXXX" />
我想使用这个数组来生成插入查询。
到目前为止我尝试过:
doc.Load(path);
ArrayList list = new ArrayList();
XmlNode idNodes = doc.SelectSingleNode("DATAPACKET/ROWDATA/ROW");
foreach (XmlNode node1 in idNodes.Attributes)
{
list.Add(node1.InnerText);
}
我有从我的XML在线生成的类,我正在使用它们来反序列化我的XML文件。
答案 0 :(得分:4)
您可以为名称 - 值对创建字典。使用Linq2Xml:
(不要忘记默认的XmlNamespace)
var xDoc = XDocument.Parse(xmlstring);
XmlNamespaceManager mgr = new XmlNamespaceManager(xDoc.CreateNavigator().NameTable);
mgr.AddNamespace("ns", "http://www.seavus.com/AML/XML-Schema/CTR_Single.xsd");
var dict = xDoc.XPathSelectElement("//ns:ROWDATA/ns:ROW",mgr)
.Attributes()
.ToDictionary(a => a.Name, a => a.Value);
返回的字典将是:
BANK_ID: 370
AKTIVNOST_SE_VRSI_VO_19: Г
NAZIV_21: XXXXX
SEDISTE_21: XX
DANOCEN_BROJ_21: 12333
BROJ_SMETKA_21: 123333
BANKA_21: 330
DATUM_22: 03.01.2017
CAS_22: 13:30
VID_AKTIV_23: XXX
IZNOS_24: 12
VALUTA_24: 807
DATUM_25: 04.01.2017
VREME_25: 12:55
SIFRA_26: 800
OPIS_27: XXXXXXX
答案 1 :(得分:1)
您的主要问题是您从错误的命名空间中选择。当然,也没有DATAROW可供选择。
这似乎有效:
doc.Load(yourPath);
var list = new ArrayList();
XmlNamespaceManager mgr = new XmlNamespaceManager(doc.CreateNavigator().NameTable);
mgr.AddNamespace("ns", "http://www.seavus.com/AML/XML-Schema/CTR_Single.xsd");
var idNodes = doc.DocumentElement?.SelectSingleNode("ns:ROWDATA/ns:ROW", mgr);
foreach (XmlNode attr in idNodes.Attributes)
list.Add(attr.Name);