我有一个我需要编辑的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();
}
答案 0 :(得分:4)
您需要为名称空间指定名称,并在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
,这是根标记。