Как я могу разобрать файл XML, используя XmlNodeList - PullRequest
1 голос
/ 18 октября 2019

Мне было поручено взять один XML-файл и преобразовать его в новый XML. У меня нет опыта работы с XML-документами, но я смог получить некоторые данные из первого XML-документа, используя код, показанный ниже. Обратите внимание, что не весь код показан только в небольшом примере.

XmlDocument rssXmlDoc = new XmlDocument();
        // Load the RSS file from the RSS URL
        rssXmlDoc.Load("https://agency.governmentjobs.com/jobfeed.cfm?agency=ocso");

        // Setup name space
        XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssXmlDoc.NameTable);
        nsmgr.AddNamespace("joblisting", "http://www.neogov.com/namespaces/JobListing");

        // Parse the Items in the RSS file
        XmlNodeList rssNodes = rssXmlDoc.SelectNodes("rss/channel/item/");

        // Iterate through the items in the RSS file
        foreach (XmlNode rssNode in rssNodes)
        {

            XmlNode rssSubNode = rssNode.SelectSingleNode("title");
            string title = rssSubNode != null ? rssSubNode.InnerText : "";

используя этот код, я могу получить большинство элементов. Я столкнулся со стеной, когда пытался получить данные от дочернего элемента. Часть XML, которую я не могу получить, показана ниже.

<joblisting:department>Supply</joblisting:department>
                <guid isPermaLink="true">https://www.governmentjobs.com/careers/ocso/Jobs/2594527</guid>
                <joblisting:categories>
                      <joblisting:category xmlns:joblisting="http://www.neogov.com/namespaces/JobListing" xmlns:atom="http://www.w3.org/2005/Atom">
                        <CategoryCode>ClericalDataEntry</CategoryCode>
                        <Category>Clerical &amp; Data Entry</Category>
                      </joblisting:category>
                      <joblisting:category 
                </joblisting:categories>            

Но я не могу получить все данные. Как я могу получить значение для элемента, который начинается с guid isPermaLink = "true"

Для списка вакансий: категории Я использовал цикл foreach для чтения этих значений

foreach (var item in rssSubNode.SelectNodes("joblisting:categories", nsmgr))
            {
                rssSubNode = rssSubNode = rssNode.SelectSingleNode("joblisting:category", nsmgr);
                string category = rssSubNode != null ? rssSubNode.InnerText : "";
            }

Как можночитать значения этих дочерних элементов?

1 Ответ

1 голос
/ 18 октября 2019

Для чтения узла guid вы можете использовать следующий код. обратите внимание, что использование selectSingleNode в узле содержит узел "item".

public static void test() {
    XmlDocument rssXmlDoc = new XmlDocument();
    // Load the RSS file from the RSS URL
    rssXmlDoc.Load("https://agency.governmentjobs.com/jobfeed.cfm?agency=ocso");

    // Setup name space
    XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssXmlDoc.NameTable);
    nsmgr.AddNamespace("joblisting", "http://www.neogov.com/namespaces/JobListing");

    // Parse the Items in the RSS file
    XmlNodeList rssNodes = rssXmlDoc.SelectNodes("rss/channel/item");


    // Iterate through the items in the RSS file
    foreach (XmlNode rssNode in rssNodes) {
        var xmlnode = rssNode.SelectSingleNode("guid ");
        System.Console.WriteLine("the value of guid is =>" + xmlnode.InnerText);

        XmlNode rssSubNode = rssNode.SelectSingleNode("title");
        string title = rssSubNode != null ? rssSubNode.InnerText : "";
    }
}
...