2013-06-03 8 views
7

मैं एक्सएमएल फ़ाइल से मूल्य प्राप्त करना चाहता हूं लेकिन मैं असफल रहा। क्या आप कृपया समस्या को इंगित करने में मेरी मदद कर सकते हैं ?? क्योंकि मैंने परीक्षण करने और गुगल करने के लिए पहले से ही बहुत मेहनत की है लेकिन मैं अभी भी समस्या को नहीं देख सकता।सी # एक्सएमएल डॉक्यूमेंट सिलेक्ट नोड्स काम नहीं कर रहा है

एक्सएमएल:

<?xml version="1.0" encoding="utf-8" ?> 
<Contacts> 
    - <Contact> 
    <ID>xxx</ID> 
     <AutoUpdateEnabled>false</AutoUpdateEnabled> 
     <LastChanged>2013-05-29T01:53:59.4470000Z</LastChanged> 
    - <Profiles> 
     - <Personal> 
       <FirstName>My First Name</FirstName> 
       <LastName>My Last Name</LastName> 
       <UniqueName>My Unique Name</UniqueName> 
       <SortName></SortName> 
       <DisplayName>My Display Name</DisplayName> 
      </Personal> 
    </Profiles> 
    - <Phones> 
     - <Phone> 
      <ID>3</ID> 
      <PhoneType>Mobile</PhoneType> 
      <Number>000-0000000</Number> 
      <IsIMEnabled>false</IsIMEnabled> 
      <IsDefault>false</IsDefault> 
      </Phone> 
    </Phones> 
    - <Locations> 
     - <Location> 
       <ID>2</ID> 
       <LocationType>Business</LocationType> 
       <CompanyName></CompanyName> 
       <IsDefault>false</IsDefault> 
      </Location> 
     </Locations> 
</Contact> 
- <Contact> 
    <ID>xxx</ID> 
    <AutoUpdateEnabled>false</AutoUpdateEnabled> 
    <LastChanged>2013-05-29T01:53:25.2670000Z</LastChanged> 
    - <Profiles> 
     - <Personal> 
       <FirstName>Person</FirstName> 
       <LastName>Two</LastName> 
       <UniqueName></UniqueName> 
       <SortName></SortName> 
       <DisplayName>Person Two</DisplayName> 
      </Personal> 
     </Profiles> 
    - <Emails> 
     - <Email> 
       <ID>1</ID> 
       <EmailType>Personal</EmailType> 
       <Address>[email protected]</Address> 
       <IsIMEnabled>false</IsIMEnabled> 
       <IsDefault>true</IsDefault> 
      </Email> 
     </Emails> 
    - <Locations> 
     - <Location> 
       <ID>2</ID> 
       <LocationType>Business</LocationType> 
       <CompanyName>Testing Company</CompanyName> 
       <IsDefault>false</IsDefault> 
      </Location> 
     </Locations> 
    </Contact> 
</Contacts> 

मेरे नमूना कोड:

XmlDocument xmldoc = new XmlDocument(); 
xmldoc.LoadXml("TheXMLFile.xml"); 

xmldoc.DocumentElement.SelectNodes("contact") // return 0 counts 
xmldoc.DocumentElement.SelectNodes("/contact") // return 0 counts 
xmldoc.DocumentElement.SelectNodes("/contact") // return 0 counts 
xmldoc.DocumentElement.SelectNodes("/contacts/contact") // return 0 counts 
xmldoc.DocumentElement.SelectNodes("*") // return 2 counts !this works 

XmlNodeList elemList = xmldoc.DocumentElement.GetElementsByTagName("contact"); // return 2 counts !this also works 
foreach (XmlNode node in elemList) 
{  
    node.SelectSingleNode("Profiles") //return "" 
    node.SelectSingleNode("/Profiles") //return "" 
    node.SelectSingleNode("//Profiles") //return "" 
    node.SelectSingleNode(".//Profiles") //return "" 
} 

मैं सिर्फ "FirstName, LastName, ईमेल पता", SelectNodes समारोह सिर्फ उम्मीद की तरह काम नहीं कर रहा प्राप्त करना चाहते हैं ... नहीं सुराग ... कृपया मदद करें। अग्रिम

उत्तर

10

धन्यवाद आप कुछ इस तरह की जरूरत है:

XmlDocument xmldoc = new XmlDocument(); 
xmldoc.Load(@"D:\temp\contacts.xml"); // use the .Load() method - not .LoadXml() !! 

// get a list of all <Contact> nodes 
XmlNodeList listOfContacts = xmldoc.SelectNodes("/Contacts/Contact"); 

// iterate over the <Contact> nodes 
foreach (XmlNode singleContact in listOfContacts) 
{ 
    // get the Profiles/Personal subnode 
    XmlNode personalNode = singleContact.SelectSingleNode("Profiles/Personal"); 

    // get the values from the <Personal> node 
    if (personalNode != null) 
    { 
     string firstName = personalNode.SelectSingleNode("FirstName").InnerText; 
     string lastName = personalNode.SelectSingleNode("LastName").InnerText; 
    } 

    // get the <Email> nodes 
    XmlNodeList emailNodes = singleContact.SelectNodes("Emails/Email"); 

    foreach (XmlNode emailNode in emailNodes) 
    { 
     string emailTyp = emailNode.SelectSingleNode("EmailType").InnerText; 
     string emailAddress = emailNode.SelectSingleNode("Address").InnerText; 
    } 
} 

इस दृष्टिकोण के साथ, आप सभी डेटा आप ठीक ढंग से की जरूरत को पढ़ने के लिए सक्षम होना चाहिए।

+0

क्या मैं "संपर्क" के लिए फ़ोरैच लूप का उपयोग कर सकता हूं और फिर लूप के अंदर एक ईमेल का चयन कर सकता हूं ?? – user2402624

+0

@ user2402624: यदि आप केवल एक ही ई-मेल (संभावित रूप से एकाधिक से बाहर) चाहते हैं - हाँ, आप यह कर सकते हैं। –

+1

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन जो मैं देख सकता हूं उससे लोडएक्सएमएल काम नहीं करता है यदि आप किसी XMLNodeList (Xpath कथन के साथ) से चयन नोड्स चाहते हैं। मुझे एक ही परिणाम मिला - 0 इससे कोई फर्क नहीं पड़ता कि मैंने एक्सपैथ की व्यवस्था कैसे की। क्या इस बग के लिए कोई फिक्स है? – MC9000

0

एक्सएमएल टैग केस निर्भर हैं इसलिए संपर्क करें! = संपर्क।

शुरुआत के लिए इसे बदलें।

संबंधित मुद्दे