Solved

How cam I xtract xml content into a new stream

Posted on 2012-12-31
8
473 Views
Last Modified: 2013-01-02
Hello all
Below is a complete xml file. I would like to extract the following tag <SearchResults> and all it's content into a new stream using c#
Note I DO NOT want  <SearchResults xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> tag
I WANT <SearchResults> and all it's contents
Sorry if I was rude in using capitals!!!

Here goes the xml:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <VacancyDetailsResponse xmlns="http://Navms.Ms.ExternalInterfaces/2011">
      <MessageId>8d947e6f-f3c2-46b5-a8e9-2d7f397fb186</MessageId>
      <SearchResults xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
        <AVMSHeader>
          <ApprenticeshipVacanciesDescription>If you are interested in finding out more about employing apprentices, the benefits they can bring to your business, and the benefits of Apprenticeship vacancies please visit our website and complete the online enquiry form.</ApprenticeshipVacanciesDescription>
          <ApprenticeshipVacanciesURL>http:\\www.apprenticeshipvacancies.gov.uk\Employers.aspx</ApprenticeshipVacanciesURL>
        </AVMSHeader>
        <SearchResults>
          <VacancyFullData>
            <VacancyLocationType>Standard</VacancyLocationType>
            <VacancyAddress>
              <AddressLine1>Kelvin Place</AddressLine1>
              <AddressLine2/>
              <AddressLine3/>
              <AddressLine4/>
              <AddressLine5/>
              <County>Norfolk</County>
              <GridEastM>585823</GridEastM>
              <GridNorthM>281921</GridNorthM>
              <Latitude>52.4033195889</Latitude>
              <Longitude>0.7319373790</Longitude>
              <PostCode>IP24 3RR</PostCode>
              <Town>Thetford</Town>
            </VacancyAddress>
            <ApprenticeshipFramework>Process Manufacturing</ApprenticeshipFramework>
            <ClosingDate>2012-11-30T00:00:00</ClosingDate>
            <ShortDescription>Great opportunity to work for a successful company in Thetford as a Manufacturer / Machinist.</ShortDescription>
            <EmployerName>Polypads Limited</EmployerName>
            <LearningProviderName>Delivered by W S Training Ltd.</LearningProviderName>
            <NumberOfPositions>1</NumberOfPositions>
            <VacancyTitle>Manufacturer / Machinist</VacancyTitle>
            <CreatedDateTime>2012-10-02T09:07:59.023</CreatedDateTime>
            <VacancyReference>98571</VacancyReference>
            <VacancyType>IntermediateLevelApprenticeship</VacancyType>
            <VacancyUrl>https://apprenticeshipvacancymatchingservice.lsc.gov.uk/NAVMS/Forms/Vacancy/VacancyDetails.aspx?Query=WgjHmG7hReZCalVznA0EzjTdgvTfmmXSS787Cl2KUOjAF0b6anssFkf0eoS3q02D1QEkH6w2AGnOpwHWszd%2bSPVQQaoRu5gPdXVyZlziKMJg0bJb9PJ1Axze9JCU5Mu4OcsJCktAOaW0ztnbbmujGMflOqnj9KKyxb8M2gXAxGGG7lW2Qo6sW62SndaKjHslTWXkGR8nydthAigiaEXo8Nd05GmR0TdmqDXPXwbWsCE2nUu9d8UpfE3eZDds%2bLx3z5N34NtrO8hFbaXB%2fHmNXg%3d%3d</VacancyUrl>
            <FullDescription><![CDATA[A fantastic opportunity for a horse enthusiast to work in a fast growing industry.<br />Main Duties:<br /><ul><li>Cutting and preparation of materials </li><li>Sewing </li><li>Eyeletting </li><li>Packing </li><li>Quality checking </li></ul>]]></FullDescription>
            <SupplementaryQuestion1>How will you travel to work?</SupplementaryQuestion1>
            <SupplementaryQuestion2>Have you got any experience with horses?</SupplementaryQuestion2>
            <ContactPerson>Geminesse Curtis- Training &amp;Recruitment Administrator - 01473 604260 - gcurtis@wstraining.co.uk</ContactPerson>
            <EmployerDescription>Polypads manufacture horse tack and horse equipment for the equine industry. They sell to commercial and domestic customers. They currently employ 10 people.</EmployerDescription>
            <ExpectedDuration>15 months</ExpectedDuration>
            <FutureProspects>This is a fast growing company, and there is potential to grow with it. Increase work load and tasks as well as increasing responsibilities. &lt;br />&lt;br />Possibilities of becoming an experienced machinist. This is a permanent position.</FutureProspects>
            <InterviewFromDate>2012-06-04T00:00:00</InterviewFromDate>
            <LearningProviderDesc>WS Training offers apprenticeships in a wide variety of occupations. If you are interested in gaining a qualification while you work then contact us, whether you are already employed or need help finding a job. Apprenticeships allow you to "Earn While You Learn"</LearningProviderDesc>
            <LearningProviderSectorPassRate>67</LearningProviderSectorPassRate>
            <PersonalQualities><![CDATA[<ul><li>Horse knowledge essential </li><li>Able to work as part of a team </li></ul><p>?</p><p>?</p>]]></PersonalQualities>
            <PossibleStartDate>2012-06-11T00:00:00</PossibleStartDate>
            <QualificationRequired>Basic Literacy and Numeracy skills</QualificationRequired>
            <SkillsRequired><![CDATA[<ul><li>Good attention to detail </li><li>Experience using a sewing machine (desirable) </li></ul><p>?</p>]]></SkillsRequired>
            <TrainingToBeProvided>Level 2 in Manufacturing including technical certificate and key skills. This is a work based qualification and does not require day release to college.</TrainingToBeProvided>
            <WeeklyWage>100.0000</WeeklyWage>
            <WorkingWeek>Monday to Thursday 9am - 4:30pm</WorkingWeek>
            <OtherImportantInformation>From the 1st October 2010 a National Minimum Wage (NMW) for apprentices has been introduced for young people aged 16-18 and those aged over 19 in the first year of their Apprenticeship. The new rate is ?2.50 per hour. The new NMW applies to time working plus time spent training as this is also part of the Apprenticeship. Anyone not covered by the age category above will be entitled to the NMW appropriate to their age. &lt;br />&lt;br />Applications will be assessed and interviewed as soon as they are received, which may result in the vacancy closing before the advertised closing date, please apply as soon as possible to avoid disappointment.</OtherImportantInformation>
            <EmployerWebsite/>
          </VacancyFullData>        
        </SearchResults>
        <TotalPages>10</TotalPages>
      </SearchResults>
    </VacancyDetailsResponse>
  </s:Body>
</s:Envelope>


If anyone could make my New Year I would be ever in their debt
Thanks Puds 32
0
Comment
Question by:Puds32
  • 4
  • 2
  • 2
8 Comments
 
LVL 74

Accepted Solution

by:
käµfm³d   👽 earned 450 total points
Comment Utility
You can try something along these lines:

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Xml.Linq;

namespace ConsoleApplication46
{
    class Program
    {
        static void Main(string[] args)
        {
            XDocument xdoc = XDocument.Load("input.xml");
            MemoryStream newStream = new MemoryStream();
            XNamespace i = "http://Navms.Ms.ExternalInterfaces/2011";
            IEnumerable<XElement> searchResults = xdoc.Descendants(i + "SearchResults")
                                                        .Descendants(i + "SearchResults");

            searchResults.First().Save(newStream);
        }
    }
}

Open in new window

0
 
LVL 8

Expert Comment

by:JustAndrei
Comment Utility
Sorry for offtopic, why do you want to get rid of xmlns:i? It's just a declaration of an alias for the namespace, while the element itself does not belong to that namespace, so the declaration does not make your post-processing any harder.
0
 

Author Comment

by:Puds32
Comment Utility
Hi sorry for the delay in replying
Thanks for the above help, I will give it a try later today and update you

As to the offtopic comment:
I am putting the fragment into a datatable which I will then staore to an sql database, this works fine and seems staright forward, but if I try loading the whole documnet into a datatable I get errors, I'm a bit new this and have chosen the path of least resistance!!!
0
 
LVL 74

Expert Comment

by:käµfm³d 👽
Comment Utility
@JustAndrei

Hopefully I'll be corrected if I am wrong  ; )

I initially thought he was trying to strip out the alias, but I looked a bit closer and there are actually two SearchResults elements--one a descendant of the other. The ancestor has the namespace declaration whereas the descendant does not. The code above reflects trying to get the descendant, not the ancestor.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 8

Expert Comment

by:JustAndrei
Comment Utility
Oh, I didn't notice there were two elements, so I thought Puds32 wanted to remove the declaration. Now it seems the descendant is needed indeed. Sorry, it's my mistake.
0
 
LVL 8

Assisted Solution

by:JustAndrei
JustAndrei earned 50 total points
Comment Utility
Btw, kaufmed, I suspect your code may output namespace navms.ms... Doesn't it? (I haven't tried)
I'm asking because Puds32 seems to want to get rid of all namespaces.
0
 

Author Closing Comment

by:Puds32
Comment Utility
Hi kaufmed
Your solution seems to have worked beautifully, the resulting xml fragment loaded into a datatable and that desplayed in a grid

Hi JustAndrei
You right it did include a namespace in the fragment, but this didn't seem to stop it loading into a datatable so I can live with it, if you know how to get rid of the namespace that would be good

Thanks to you both
Regards Puds32
0
 
LVL 8

Expert Comment

by:JustAndrei
Comment Utility
foreach( var e in searchResults.First().DescendantsAndSelf() )
{
    e.Name = XNamespace.None.GetName( e.Name.LocalName );
}

Open in new window

0

Featured Post

What Security Threats Are You Missing?

Enhance your security with threat intelligence from the web. Get trending threat insights on hackers, exploits, and suspicious IP addresses delivered to your inbox with our free Cyber Daily.

Join & Write a Comment

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
This demo shows you how to set up the containerized NetScaler CPX with NetScaler Management and Analytics System in a non-routable Mesos/Marathon environment for use with Micro-Services applications.
You have products, that come in variants and want to set different prices for them? Watch this micro tutorial that describes how to configure prices for Magento super attributes. Assigning simple products to configurable: We assigned simple products…

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now