2009-06-24 7 views
23

मैं इस प्रकार एक XML दस्तावेज है:सी एक्सएमएल जांच करने के लिए # Linq तत्व मौजूद

<Database> 
<SMS> 
    <Number>"+447528349828"</Number> 
    <Date>"09/06/24</Date> 
    <Time>13:35:01"</Time> 
    <Message>"Stop"</Message> 
</SMS> 
<SMS> 
    <Number>"+447528349828"</Number> 
    <Date>"09/06/24</Date> 
    <Time>13:35:01"</Time> 
    <Message>"Stop"</Message> 
</SMS> 
</Database> 

मैं कि क्या माता पिता एसएमएस नोड की संख्या चाइल्ड नोड (करने के लिए मान्यता प्रयोजनों के लिए दस्तावेज़ में मौजूद है की जाँच करने के कोशिश कर रहा हूँ डुप्लिकेट डेटा डालने से बचें)।

संभावित समाधान पर कोई सलाह?

संपादित करें: तत्व की तुलना एक इनपुट स्ट्रिंग से की जाएगी। उदाहरण के लिए यदि (inputNumber == xmlDocNumber) {// नया तत्व डालें}

+0

क्या आप हमें कुछ नमूना (छद्म?) कोड दे सकते हैं ताकि आपको संदर्भ की स्पष्ट और स्पष्ट तस्वीर प्रदान की जा सके> –

+0

इनमें से कोई भी काम grr! – Goober

+1

नमूना कोड कैसे मदद करेगा .......... किसी XML दस्तावेज़ में कोई निर्दिष्ट तत्व ढूंढें ....... मैं आपके पास जो कुछ भी दे सकता हूं उसके अलावा मैं आपको क्या दे सकता हूं? – Goober

उत्तर

41

मैं Count() का उपयोग करने के लिए थोड़ा अलग प्रयास सुझाऊंगा - Any() का उपयोग करें।

var smsWithNoNumber = main.Descendants("SMS") 
          .Where(x => !x.Elements("Number").Any()); 

इस मामले में यह ज्यादा अंतर नहीं होगा, लेकिन मामलों में Count() सिर्फ एक मिलियन हिट गिनती करने के लिए हो सकता है, जहां: लाभ के रूप में यह किसी भी मेल खाता है सब पर हो जाता है कि कोई भी() के रूप में जल्द ही बंद हो सकता है आपको बताने के लिए कि कम से कम एक था, यह जानने के लिए एक उपयोगी चाल है। मैं कहूंगा कि यह आपके मतलब का एक स्पष्ट संकेतक भी है।

+0

मैं इसे जांचने के लिए कैसे उपयोग करूं? क्षमा करें, मैं अभी भी LINQ – Blackator

+0

@ ब्लैकेटर से परिचित होने की प्रक्रिया में हूं: 'कोई भी भाग * चेक * कर रहा है। मुझे नहीं पता कि आप किस समस्या का सामना कर रहे हैं, इसलिए यह अधिक सटीक होना मुश्किल है। शायद आपको एक नया सवाल पूछना चाहिए? –

+0

कृपया मेरा प्रश्न [यहां] देखें (http://stackoverflow.com/questions/12276533/check-if-an-element-exists-in-xml)। धन्यवाद जॉन – Blackator

0

आप एक XSL दस्तावेज़ है कि एसएमएस नोड्स के माध्यम पाशन और बहिष्कृत करके डेटा तब्दील लागू हो सकते हैं किसी भी एक नकली नंबर/पाठ() मूल्य होता है

चेक होगा कुछ की तरह:

<xsl:template match="SMS"> 
<xsl:variable name="parentNode" select="." /> 
<xsl:if test="preceding-sibling::SMS/Number/text()=$parentNode/Number/text()"> 
.....include a copy of node...... 
</xsl:if> 
    </xsl:template> 
+0

सवाल लिंक से एक्सएमएल # –

1

यह मानते हुए कि आप कुछ canonicalized रूप में अपना नंबर है और अपने एक्सएमएल एक XmlDocument या कुछ इस तरह, सरल गैर LINQ जिस तरह से यह एक XPath क्वेरी के साथ है करने के लिए में लोड किया जाता:

string pattern = String.Format("/Database/SMS/Number[. = '{0}']", number); 
if (myDoc.SelectSingleNode(pattern) != null) 
{ 
    // number already exists in document 
} 
+0

का उपयोग कर रहा है प्रश्न यह लिंक लिंक से एक्सएमएल का उपयोग कर रहा है –

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