2010-11-29 11 views
5

का प्रारूप/इंडेंट आउटपुट कैसे प्रारूपित करें मैं HTML कोड का एक टुकड़ा आउटपुट करने की कोशिश कर रहा हूं। लेकिन मुझे इसे सुंदर-मुद्रित/इंडेंट होने की आवश्यकता है। <xsl:text>&#xa;</xsl:text> और <xsl:text>&#9;</xsl:text> का उपयोग किये बिना ऐसा करने का कोई तरीका है?एक एक्सएसएल परिवर्तन

मैंने बिना किसी परिणाम के निम्नलिखित पंक्ति का उपयोग किया है।

<xsl:output method="html" indent="yes"/> 

फोल्वोइंग सी # कोड है;

XslCompiledTransform XSLT = new XslCompiledTransform(); 
    XSLT.Load(xslPath); 

    using (XmlTextWriter writer = new XmlTextWriter(writePath, null)) 
    { 
     if (isTopLevel) 
     { 
      XSLT.Transform(XMLDocumentForCurrentUser, writer); 
     } 
     else 
     { 
      XsltArgumentList xslArg = new XsltArgumentList(); 
      xslArg.AddParam("MenuIndex", "", menuIndex); 
      XSLT.Transform(XMLDocumentForCurrentUser, xslArg, writer); 
     } 
    } 
// I write the output to file 
//All this works fine, only now I need the HTML to be readable (in the browser's view source or any notepad) 

क्या किसी को प्रारूप (कम से कम इंडेंट) एक्सएसएलटी आउटपुट प्रारूपित करने का तरीका पता है?

+0

@conqenator: यदि आप धारावाहिक पैरामीटर 'xsl: output/@ indent' (शायद क्योंकि यह MSXSL में अच्छा नहीं है) का उपयोग नहीं करना चाहते हैं और आप इसे मैन्युअल रूप से नहीं करना चाहते हैं, तो वहां कोई नहीं है एक्सएसएलटी के दायरे में समाधान, लेकिन क्योंकि आप इस तरह के प्रतिबंध लगाते हैं। –

+0

मतदान क्यों करें? –

+1

आपको यह समझने के लिए अधिक जानकारी प्रदान करने की आवश्यकता होगी कि इंडेंट = "हाँ" आपके लिए क्यों काम नहीं करता है। तो आपका एक्सएसएलटी प्रोसेसर कौन सा है, आप वास्तव में परिवर्तन कैसे चलाते हैं, आप वास्तव में क्या बदलते हैं (उदा। फ़ाइल?), आप परिवर्तन के परिणाम को कैसे देखते हैं? –

उत्तर

6

यदि आप XSLT प्रोसेसर को xsl: आउटपुट निर्देश लागू करना चाहते हैं तो अपना खुद का XmlTextWriter न बनाएं। इसके बजाय या तो एक फ़ाइल को सीधे लिख सकते हैं या इस प्रकार एक XmlWriter बनाएँ: <xsl:output indent="yes"/> के अलावा बहुत-मुद्रण के लिए

using (XmlWriter result = XmlWriter.Create(writePath, XSLT.OutputSettings)) 
{ 
     if (isTopLevel) 
     { 
      XSLT.Transform(XMLDocumentForCurrentUser, result); 
     } 
     else 
     { 
      XsltArgumentList xslArg = new XsltArgumentList(); 
      xslArg.AddParam("MenuIndex", "", menuIndex); 
      XSLT.Transform(XMLDocumentForCurrentUser, xslArg, result); 
     } 
} 
+1

+1 सही उत्तर के लिए, अनुपस्थित स्पष्टीकरण के अलावा: परिवर्तन आउटपुट परिणाम सही ढंग से क्रमबद्ध कर रहा है, लेकिन XmlWriter वर्ग डिफ़ॉल्ट रूप से केवल सफेद नोड को स्थानांतरित कर रहा है; आपको XmlWriter कक्षा में पैरामीटर द्वारा इस व्यवहार को बंद करने की आवश्यकता है। –

+0

बेकार ढंग से काम किया! धन्यवाद! –

+0

धन्यवाद! मैं अपने बुद्धि के अंत में यह पता लगाने की कोशिश कर रहा था कि उत्पादन क्यों इंडेंट नहीं किया गया है और यह इसे ठीक करता है। – EM0

3

वहाँ जाना जाता है तरीकों।

एक अच्छी जगह देखने के लिए Dave Pawson's XSLT FAQ है: http://www.dpawson.co.uk/xsl/sect2/pretty.html

तुम भी XPath Visualizer के कोड पर एक नज़र है करने के लिए दिलचस्पी हो सकती है।

+0

ओपी का कहना है कि आउटपुट क्रमबद्धता पैरामीटर अपने एक्सएसएलटी प्रोसेसर के साथ काम नहीं करते हैं और मैन्युअल पहचान का उपयोग नहीं करना चाहते हैं। –

+0

मैं वास्तव में सोच रहा था (और उम्मीद है कि आप आसपास थे) इस सवाल को पोस्ट करते समय। :) हाँ, मैंने कुछ दिन पहले ही एक्सपैथ विज़ुअलाइज़र डाउनलोड कर लिया है। लिंक्स के लिए आपको धन्यवाद। –

+0

@ अलेजैंड्रो: यह कई मामलों में एक समस्या हो सकती है। सुंदर मुद्रण के लिए विश्वसनीय तरीका, विशेष रूप से जब रूपांतरण विभिन्न एक्सएसएलटी प्रोसेसर के साथ चलाना है, इंडेंटेशन पैरामीटर पर निर्भर नहीं है बल्कि DIY पर निर्भर है –

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