请帮我找到正确的名称空间组合,以便我可以在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();
        }

请帮我找到正确的名称空间组合,以便我可以在c#中查询XML

您需要为名称空间指定一个名称,并指定与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,这是根标记。