2

我有一个需要编辑的 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();
        }
4

1 回答 1

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,这是根标签。

于 2013-03-20T13:10:49.137 回答