2008-10-06 14 views
8

चलें मान हम इस एक्सएमएल है:क्या लिंक-टू-एक्सएमएल क्वेरी में केवल स्थानीय नामों का उपयोग करके तत्वों को पुनर्प्राप्त करने का कोई तरीका है?

<?xml version="1.0" encoding="UTF-8"?> 
<tns:RegistryResponse status="urn:oasis:names:tc:ebxml-regrep:ResponseStatusType:Failure" 
    xmlns:tns="urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0" 
    xmlns:rim="urn:oasis:names:tc:ebxml-regrep:xsd:rim:3.0"> 
    <tns:RegistryErrorList highestSeverity=""> 
     <tns:RegistryError codeContext="XDSInvalidRequest - DcoumentId is not unique." 
      errorCode="XDSInvalidRequest" 
      severity="urn:oasis:names:tc:ebxml-regrep:ErrorSeverityType:Error"/> 
    </tns:RegistryErrorList> 
</tns:RegistryResponse> 

RegistryErrorList तत्व को पुनः प्राप्त करने के लिए, हम करते हैं

XDocument doc = XDocument.Load(<path to xml file>); 
XNamespace ns = "urn:oasis:names:tc:ebxml-regrep:xsd:rs:3.0"; 
XElement errorList = doc.Root.Elements(ns + "RegistryErrorList").SingleOrDefault(); 

लेकिन इस

XElement errorList = doc.Root.Elements("RegistryErrorList").SingleOrDefault(); 

तरह कर सकते हैं वहाँ क्वेरी करने के लिए एक रास्ता है तत्व के नामस्थान के बिना। मूल रूप से वहाँ XPath में स्थानीय नाम() का उपयोग करने के लिए कुछ conceptially समान (यानी // * [स्थानीय नाम() = 'RegistryErrorList'])

उत्तर

8
var q = from x in doc.Root.Elements() 
     where x.Name.LocalName=="RegistryErrorList" 
     select x; 

var errorList = q.SingleOrDefault(); 
2

"विधि" क्वेरी सिंटैक्स लगेगा में है जैसे:

XElement errorList = doc.Root.Elements().Where(o => o.Name.LocalName == "RegistryErrorList").SingleOrDefault(); 
0

निम्न एक्सटेंशन एक XDocument (या किसी भी XContainer) के किसी भी स्तर से मिलान तत्वों का एक संग्रह वापस आ जाएगी।

 public static IEnumerable<XElement> GetElements(this XContainer doc, string elementName) 
    { 
     return doc.Descendants().Where(p => p.Name.LocalName == elementName); 
    } 

आपका कोड अब इस प्रकार दिखाई देगा:

var errorList = doc.GetElements("RegistryErrorList").SingleOrDefault(); 
संबंधित मुद्दे

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