2008-11-12 17 views
14

मैं सी # के लिए बिल्कुल नया हूं इसलिए मैं यहां यह पूछ रहा हूं।सी # स्ट्रिंग। डबल कोट्स और लिटल्स को बदलें

मैं एक वेब सेवा का उपभोग कर रहा हूं जो एक्सएमएल मूल्यों की एक लंबी स्ट्रिंग देता है। चूंकि यह एक स्ट्रिंग है, सभी गुण दोहरे उद्धरण

string xmlSample = "<root><item att1=\"value\" att2=\"value2\" /></root>" 

यहां मेरी समस्या है। मैं एक साधारण स्ट्रिंग करना चाहता हूं। जगह। अगर मैं PHP में काम कर रहा था तो मैं सिर्फ स्ट्रिप_स्लाश() चलाऊंगा।

हालांकि, मैं सी # में हूं और मैं इसके जीवन के लिए इसे समझ नहीं सकता हूं। मैं बाहर मेरी अभिव्यक्ति डबल कोट्स ("), क्योंकि यह स्ट्रिंग समाप्त हो जाता है को बदलने के लिए नहीं लिख सकते हैं अगर मैं यह बच तो यह गलत परिणाम क्या मैं गलत कर रहा हूँ है

string search = "\\\""; 
    string replace = "\""; 
    Regex rgx = new Regex(search); 
    string strip = rgx.Replace(xmlSample, replace); 

    //Actual Result <root><item att1=value att2=value2 /></root> 
    //Desired Result <root><item att1="value" att2="value2" /></root> 

MizardX:।।? करने के लिए एक कच्चे स्ट्रिंग आप इसे दोगुना करने की जरूरत है एक उद्धरण शामिल हैं।

महत्वपूर्ण जानकारी है कि, अब है कि दृष्टिकोण की कोशिश कर रहा ... वहाँ या तो कुछ दोहरे उद्धरण चिह्नों के साथ यहां चल रहा है। अवधारणाओं आप सभी कोई किस्मत सुझाव दे रहे हैं ठोस हैं, लेकिन यहां मुद्दा डबल कोट्स से निपट रहा है और ऐसा लगता है कि मुझे कुछ addit करने की आवश्यकता होगी इस समस्या को हल करने के लिए आयनिक शोध। अगर कोई कुछ के साथ आता है तो कृपया एक उत्तर पोस्ट करें।

string newC = xmlSample.Replace("\\\"", "\""); 
//Result <root><item att=\"value\" att2=\"value2\" /></root> 

string newC = xmlSample.Replace("\"", "'"); 
//Result newC "<root><item att='value' att2='value2' /></root>" 
+0

निश्चित रूप से रेगेक्स का उपयोग न करें; बस प्रतिस्थापन फ़ंक्शन का उपयोग करें! – Domenic

+0

अंतिम उत्तर देखें - आप जो चाहते हैं उसे पूरा कर लिया है, जिस तरह से आप इसे देख रहे हैं, यह आपको गड़बड़ कर रहा है। –

+0

मैं सहमत हूं, मैं सहमत हूं यहां समस्या भी नहीं देख सकती है। स्लेश असली चरित्र नहीं हैं स्ट्रिंग में एस, वे मार्कर से बच रहे हैं! –

उत्तर

20

सी # में निम्नलिखित बयान

string xmlSample = "<root><item att1=\"value\" att2=\"value2\" /></root>" 

वास्तव में मूल्य

<root><item att1="value" att2="value2" /></root> 

जबकि

string xmlSample = @"<root><item att1=\""value\"" att2=\""value2\"" /></root>"; 

<root><item att1=\"value\" att2=\"value2\" /></root> 
का मान स्टोर करेगा दूसरे मामले के लिए

, आप परिणाम होगा

<root><item att1="value" att2="value2" /></root> 

पी एस का पालन के रूप में

string test = xmlSample.Replace(@"\", string.Empty); 

रिक्त स्ट्रिंग से स्लैश() की जगह की जरूरत है

  1. स्लैश (\) सी # में डिफ़ॉल्ट एस्केप वर्ण
  2. स्लैश अनदेखी करने के लिए, स्ट्रिंग की शुरुआत में @ उपयोग
  3. @ प्रयोग किया जाता है, भागने चरित्र दोहरे उद्धरण (")
है
2

दोनों स्ट्रिंग और regex से बचने के लिए \ उपयोग करता है। रेगेक्स चरित्र \ के बाद " देखेगा, और लगता है कि यह एक शाब्दिक भाग है। इसे आज़माएं:

Regex rgx = new Regex("\\\\\""); 
string strip = rgx.Replace(xmlSample, "\""); 

आप सी # में कच्चे तार (जिसे veratim स्ट्रिंग्स भी कहा जाता है) का उपयोग भी कर सकते हैं। वे @ के साथ prefixed हैं, और सभी बैक-स्लैश सामान्य वर्ण के रूप में माना जाता है। एक कच्ची स्ट्रिंग में उद्धरण शामिल करने के लिए आपको इसे दोगुना करने की आवश्यकता है।

Regex rgx = new Regex(@"\""")
string strip = rgx.Replace(xmlSample, @"""");

2

वहाँ सब पर एक नियमित अभिव्यक्ति का उपयोग करने का कोई कारण नहीं है ... कि तुम क्या जरूरत है की तुलना में बहुत भारी है।

string xmlSample = "blah blah blah"; 

xmlSample = xmlSample.Replace("\\\", "\""); 
+1

पढ़ना चाहिए: xmlSample = xmlSample.Replace ("\\\" "," \ ""); –

1

यदि आपको एक्सएमएल स्ट्रिंग मिल रही है तो एक्सएमएल के बजाय एक्सएमएल का उपयोग क्यों न करें?

आप सभी तत्वों और विशेषताओं के लिए उपयोग होगा और यह बहुत आसान हो सकता है और होगा बहुत तेज अपने उदाहरण में System.Xml नाम स्थान

का उपयोग कर यदि आप इस स्ट्रिंग हो रही है:

string xmlSample = "<root><item att1=\"value\" att2=\"value2\" /></root>"; 

सभी आपको उस स्ट्रिंग को एक्सएमएल दस्तावेज़ में रूपांतरित करने और इसे उपयोग करने की आवश्यकता है, जैसे:

System.Xml.XmlDocument xml = new System.Xml.XmlDocument(); 
xml.LoadXml(xmlSample); 

System.Xml.XmlElement _root = xml.DocumentElement; 

foreach (System.Xml.XmlNode _node in _root) 
{ 
    Literal1.Text = "<hr/>" + _node.Name + "<br/>"; 
    for (int iAtt = 0; iAtt < _node.Attributes.Count; iAtt++) 
     Literal1.Text += _node.Attributes[iAtt].Name + " = " + _node.Attributes[iAtt].Value + "<br/>"; 
} 

एएसपी में।जैसे Literal1 कुछ करने के लिए नेट इस वसीयत उत्पादन:

item 
att1 = value 
att2 = value2 

एक बार आप एक XmlElement में तत्व है, यह खोज और क्या उस तत्व में है के लिए मान और नाम पाने के लिए बहुत आसान है।

इसे आज़माएं, मैं वेब सर्विसेज प्रतिक्रियाओं को पुनर्प्राप्त करते समय इसे बहुत अधिक उपयोग करता हूं और जब मैं किसी XML फ़ाइल में कुछ उदाहरण के लिए सेटिंग्स के रूप में कुछ संग्रहीत करता हूं।

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