2011-01-31 16 views
5

में किसी नोड के लिए क्वेरी करने के लिए XElement का उपयोग करके मैं इस तरह दिखने वाली एक csproj फ़ाइल से नोड खींचने की कोशिश कर रहा हूं, लेकिन इसे काम पर नहीं ला सकता - शायद नामस्थान घोषणा के कारण।नेमस्पेस

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build"> 
     <PropertyGroup> 
      <RegisterForComInterop>true</RegisterForComInterop> 

यह बुरी तरह विफल रहता है:

XDocument cpo = XDocument.Load(file); 
XmlNamespaceManager nsm = new XmlNamespaceManager(new NameTable()); 
nsm.AddNamespace("x", "http://schemas.microsoft.com/developer/msbuild/200"); 
IEnumerable<XElement> list3 = cpo.XPathSelectElements("//x:RegisterForComInterop[.='true']", nsm); 

किसी को भी किसी भी विचार कृपया?

धन्यवाद।

उत्तर

12

क्या आप वास्तव में इसके लिए XPath का उपयोग करना चाहते हैं?

XDocument cpo = XDocument.Load(file); 
XNamespace x = "http://schemas.microsoft.com/developer/msbuild/2003"; 
var elements = cpo.Descendants(x + "RegisterForComInterop") 
        .Where(x => (string) x == "true"); 

या यदि आप पूरी तरह से आश्वस्त हैं कि हर RegisterForComInterop एक उपयुक्त बूलियन मान होगा रहे हैं आप explicit XElement to bool conversion उपयोग कर सकते हैं: मैं व्यक्तिगत रूप से होता

XDocument cpo = XDocument.Load(file); 
XNamespace x = "http://schemas.microsoft.com/developer/msbuild/2003"; 
var elements = cpo.Descendants(x + "RegisterForComInterop") 
        .Where(x => (bool) x); 

यह XML को LINQ भीतर नामस्थान उपयोग करने के लिए वास्तव में आसान है आम तौर पर नामस्थान शामिल होने पर XPath विशेष रूप से के बजाय इस मार्ग पर जाएं।

+0

मैं आखिरी पंक्ति को '.Where (x => bool.Parse (x.Value)) से बदल दूंगा क्योंकि हम 100% बूलियन स्ट्रिंग की उम्मीद कर रहे हैं (या फिर हम उम्मीद करते हैं और अपवाद ..)। – Shimmy

+0

और बैच प्रदर्शन के लिए इस विकल्प की लागत कम ओवरहेड है। – Shimmy

+0

@ शिमी: मैं बूल का उपयोग नहीं करता। यहां पर पर्स - मैं स्पष्ट रूप से 'बूल' में रूपांतरण का उपयोग करता हूं जो एक्सएमएल के बारे में जानता है। संपादित करेंगे –

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