2009-02-25 15 views
14

का उपयोग करते समय टेक्स्ट को कैसे रखा जाए I HTML दस्तावेज़ बनाने के लिए नई System.Xml.Linq का उपयोग कर रहा हूं (हां, मुझे HTML दस्तावेज़ के बारे में पता है, लेकिन XDocument/XElement कक्षाओं को बहुत पसंद है)। मुझे   (या कोई अन्य HTML इकाई) डालने में समस्या आ रही है। क्या मैं पहले से ही की कोशिश की है:XElement

  1. बस सीधे में पाठ डाल क्योंकि & पूर्णांक & कर दिया जाता है काम नहीं करता। new XElement("h1", "Text to keep together.");

  2. मैं निम्नलिखित का उपयोग कर कच्चे एक्सएमएल में पार्स करने की कोशिश की है, लेकिन यह इस त्रुटि के साथ barfs:

    XElement.Parse, ("पाठ     करने के लिए   एक साथ रहते हैं।")

    -> nbsp'.`

  3. कोशिश संख्या निम्नलिखित की तरह तीन स्वरूपों अघोषित इकाई 'के लिए संदर्भ। अगर मैं किसी फ़ाइल में सहेजता हूं, तो बस एक जगह है,   गुम हो जाता है।


var X = new XDocument(new XElement("Name", KeepTogether("Hi Mom!"))); 
private static XNode KeepTogether(string p)` 
{ 
    return XElement.Parse("<xml>" + p.Replace(" ", "&#160;") + "</xml>").FirstNode; 
} 

मैं एक तरह से बस के बिना वह भागे तो हो रही है के माध्यम से कच्चे पाठ को गिरवी रखना नहीं पा सके। क्या मुझसे साफ़ - साफ़ कुछ चीज़ चूक रही है?

+0

क्या आप एक्सएमएल प्रदान कर सकते हैं जिसे आप पार्स करने और उत्पन्न करने का प्रयास करते हैं? –

+1

ओउप्स। के माध्यम से नहीं आया था। एक और देखो ले लो। – Eric

उत्तर

14

I couldn't find a way to just shove the raw text through without it getting escaped.

बस ऐसे ही & nbsp में यूनिकोड वर्ण डाल; सीधे टेक्स्ट नोड में (यू + 00 ए0 नो-BREAK स्पेस) को संदर्भित करता है, फिर धारावाहिक को चिंता करें कि क्या इसे & # 160 से बचने की आवश्यकता है; या नहीं। (शायद नहीं: यदि आप यूटीएफ -8 या आईएसओ -885 9 -1 का उपयोग कर रहे हैं क्योंकि आपके पेज एन्कोडिंग को चरित्र को किसी इकाई संदर्भ या चरित्र संदर्भ में एन्कोडिंग के बारे में चिंता किए बिना सीधे शामिल किया जा सकता है)।

new XElement("h1", "Text\u00A0to\u00A0keep\u00A0together"); 
1

आप क्रमांकित इकाइयों का उपयोग करने का भी प्रयास कर सकते हैं, उन्हें कोई घोषणा की आवश्यकता नहीं है। नामित इकाई & nbsp; के बराबर संख्याबद्ध इकाई; & # 160 है;

+1

जो एक ही समस्या से ग्रस्त होगा जैसे बच निकला है। – BCS

1

amp() के विपरीत, लेफ्टिनेंट (<) आदि, एक्सएमएल के लिए ज्ञात इकाई नहीं है, इसलिए आपको इसे घोषित करने की आवश्यकता है। एक्सएमएल में, उदा। &xyz; को एक इकाई के रूप में माना जाता है, पार्सर आउटपुट का उत्पादन करने के लिए अपने मूल्य का संदर्भ देगा।

// the xml, plz remove '.' within xml 
string xml = "<xml>test&.n.b.s.p;test</xml>"; 

// declare nbsp as xml entity and its value is " " in this case. 
string declareEntity = "<!DOCTYPE xml [<!ENTITY nbsp \" \">]>"; 

XElement x = XElement.Parse(declareEntity + xml); 
// output with a space between tests 
// <xml>test test</xml> 

या

// plz remove '.' in the string 
XElement.Parse("<xml>" + HttpUtility.HtmlEncode("Text&.n.b.s.p;keep everything") + "</xml>"); 
+0

यह एक्सएमएल में पार्सिंग की अनुमति देता है। हालांकि, अगर मैं एक x.Save ("test.xml") जोड़ता हूं, तो आउटपुट फ़ाइल में दो परीक्षण शब्दों के बजाय एक स्पेस कैरेक्टर होता है। अरे !!! – Eric

+0

क्या आप आवश्यकता होने पर अंतरिक्ष को प्रतिस्थापित कर सकते हैं? जैसे एचटीएमएल संदर्भ में। –

+0

मैं एक बड़ा HTML दस्तावेज़ बना रहा हूं, और उसके बाद एक दस्तावेज़ करें। सेव()। यह स्थान दस्तावेज़ में गहरा है, और आसानी से खोजने योग्य नहीं है। अभी के लिए मैं इसे हैक करने जा रहा हूं और अंतरिक्ष को हटा दूंगा (इसके बीच एक समय और एएम/पीएम)। 6:30 अपराह्न ठीक रहेगा। यद्यपि कि आपकी इस सहायता के लिए धन्यवाद! – Eric

0
&amp;nbsp; 
+0

इसका परिणाम होगा: '& amp; nbsp;' –

0

मैं इस थोड़ा Daft दृष्टिकोण है जो मुझे सूट के साथ आया था: स्ट्रिंग की जगह सभी & साथ ## एएमपी ## जब आप डेटा .... की दुकान और उत्पादन पर कि आपरेशन रिवर्स । मैं इसका उपयोग XElement SQL कॉलम के संयोजन के साथ कर रहा हूं और एक इलाज करता है।

सादर

नील

+0

जरूरी नहीं है - मेरे लिए "अतिरिक्त" 'पार्स' से तेज़ लग रहा था - http://stackoverflow.com/questions/5723146/is- कहीं -an-xelement-equal-to-xmlwriter-writeraw/21098659 # 21098659 – drzaus

2

## एएमपी ## की तरह एक मार्कर के साथ & जगह मेरी समस्या हल। शायद नहीं सुंदर समाधान, लेकिन मैं 10 मिनट में एक ग्राहक के लिए एक डेमो मिल गया तो ... मुझे परवाह नहीं है विचार के लिए :)

Thx

+0

ऐसा लगता है कि मुझे वास्तव में वास्तविक आउटपुट स्ट्रिंग की आवश्यकता होती है, उदाहरण के लिए, इसमें ' ' नहीं है और नहीं एक वास्तविक न्यू लाइन या '& # 10;।' –

2

मैं जानता हूँ कि यह पुराना है, लेकिन मैं कुछ पाया और मैं बल्कि आश्चर्यचकित हूँ!

XElement element = new XElement("name",new XCData("<br /> & etc")); 

और वहां आप जाते हैं! सीडीएटीए पाठ!

+0

समस्या (नई XElement ("नाम", नए XCData (" "))) की है कि परिणाम ToString है<[CDATA [ ]]!>। – IvanH

1

यदि आप इसे कहीं और कॉपी करते हैं तो आप चरित्र को पेस्ट कर सकते हैं। Viusal स्टूडियो की अनुमति देता है। हालांकि इस अगर आप   की जरूरत है के लिए कठिन है, यदि आप उदाहरण के लिए किसी भी प्रतीकों की जरूरत है, आसान है:

& बैल ... बस पेस्ट •

& HARR; ... बस पेस्ट करें ↔

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