请帮我找到正确的名称空间组合,以便我可以在c#中查询XML
本文关键字:我可以 XML 查询 组合 空间 | 更新日期: 2023-09-27 18:04:47
我有一个xml文件,我需要编辑,它看起来像:
<?xml version="1.0" encoding="UTF-8"?>
<PaketniUvozObrazaca xmlns="urn:PaketniUvozObrazaca_V1_0.xsd">
<PodaciOPoslodavcu>
<JIBPoslodavca>XXXXXXXXXX</JIBPoslodavca>
<NazivPoslodavca>Comapyn</NazivPoslodavca>
<BrojZahtjeva>1307</BrojZahtjeva>
<DatumPodnosenja>2013-03-19</DatumPodnosenja>
</PodaciOPoslodavcu>
<Obrazac1022>
<Dio1PodaciOPoslodavcuIPoreznomObvezniku>
<JIBJMBPoslodavca>XXXXXXXXXX</JIBJMBPoslodavca>
<Naziv>Compyny</Naziv>
<AdresaSjedista>Adress </AdresaSjedista>
<JMBZaposlenika>XXXXXXX</JMBZaposlenika>
<ImeIPrezime>ad</ImeIPrezime>
<AdresaPrebivalista>City</AdresaPrebivalista>
<PoreznaGodina>2012</PoreznaGodina>
</Dio1PodaciOPoslodavcuIPoreznomObvezniku>
</Obrazac1022>
</PaketniUvozObrazaca>
如果我想查询(选择节点)从这个文件我应该如何引用命名空间?
static void Main(string[] args)
{
XmlDocument gip = new XmlDocument();
gip.Load("C:''vs2013tests''adoGipko''gip-2012.xml");
XmlNamespaceManager nspm = new XmlNamespaceManager(gip.NameTable);
nspm.AddNamespace("urn", "PaketniUvozObrazaca_V1_0");
foreach (XmlNode uposlnik in gip.SelectNodes("//PaketniUvozObrazaca_V1_0/Obrazac1022", nspm))
{
Console.WriteLine(uposlnik.SelectSingleNode("Dio1PodaciOPoslodavcuIPoreznomObvezniku/ImeIPrezime",nspm).InnerText);
}
Console.ReadKey();
}
您需要为名称空间指定一个名称,并指定与XML中完全相同的uri。使用哪个名称并不重要:
nspm.AddNamespace("d", "urn:PaketniUvozObrazaca_V1_0.xsd");
现在所有的标签都要用这个名字:
foreach (XmlNode uposlnik in gip.SelectNodes("//d:PaketniUvozObrazaca/"+
"d:Obrazac1022", nspm))
{
Console.WriteLine(
uposlnik.SelectSingleNode("d:Dio1PodaciOPoslodavcuIPoreznomObvezniku/"+
"d:ImeIPrezime", nspm).InnerText);
}
此外,我在查询中固定了根标记。您使用的PaketniUvozObrazaca_V1_0
是名称空间的一部分。您需要使用PaketniUvozObrazaca
,这是根标记。