2011-04-18 5 views
25

मैं एक XML फ़ाइल बनाना चाहता हूं जिसका उपयोग जावा प्रोग्राम की संरचना को संग्रहीत करने के लिए किया जाएगा। मैं जावा प्रोग्राम को सफलतापूर्वक पार्स करने और आवश्यकतानुसार टैग बनाने में सक्षम हूं। समस्या तब उत्पन्न होती है जब मैं अपने टैग के अंदर स्रोत कोड शामिल करने का प्रयास करता हूं, क्योंकि जावा स्रोत कोड बड़ी संख्या में इकाई संदर्भ और &, <, >, & जैसे आरक्षित वर्णों का उपयोग कर सकता है। मैं एक वैध एक्सएमएल बनाने में सक्षम नहीं हूँ।मैं XML विशेषता मानों में <, > आदि कैसे शामिल करूं

मेरे एक्सएमएल इस तरह जाना चाहिए:

<?xml version="1.0"?> 
<prg name="prg_name"> 
    <class name= "class_name> 
    <parent>parent class</parent> 
     <interface>Interface name</interface> 
. 
. 
. 
     <method name= "method_name"> 
     <statement>the ordinary java statement</statement> 
     <if condition="Conditional Expression"> 
      <statement> true statements </statement> 
     </if> 
     <else> 
      <statement> false statements </statement> 
     </else> 
     <statement> usual control statements </statement> 
. 
. 
. 
     </method> 
    </class> 
. 
. 
. 
</prg> 

इस तरह, लेकिन समस्या यह है की if या अन्य बयान जो मान्य होने से एक्सएमएल से बचाता है उन में & या अन्य सुरक्षित प्रतीकों में से एक बहुत कुछ है सशर्त भाव है। चूंकि उपयोगकर्ता द्वारा यह सभी डेटा (स्रोत कोड) दिया गया है, इसलिए मेरे पास इसका बहुत कम नियंत्रण है। समय के संदर्भ में पात्रों से बचना बहुत महंगा होगा।

मैं तत्व पाठ से बचने के लिए सीडीएटीए का उपयोग कर सकता हूं लेकिन इसका उपयोग सशर्त अभिव्यक्ति वाले गुण मानों के लिए नहीं किया जा सकता है। मैं जावा प्रोग्राम को पार्स करने और टैग के लिए विशेषताओं और सामग्री प्राप्त करने के लिए Antlr जावा व्याकरण का उपयोग कर रहा हूं। तो क्या इसके लिए कोई और कामकाज है?

उत्तर

48

आप

" to &quot; 
' to &apos; 
< to &lt; 
> to &gt; 
& to &amp; 
एक्सएमएल के लिए

से बचने के लिए होगा।

+0

कैसे एक + (प्लस) –

+1

@LarsVandeDonk "+" के रूप में जाना ठीक है, इसे एक्सएमएल में भागने की आवश्यकता नहीं है। शायद आप यूआरएल से बचने के बारे में बात कर रहे थे? – izogfif

7

एक्सएमएल में जिम्मेदार बताते हैं आप

" with &quot; 
< with &lt; 
& with &amp; 

पलायन करना होगा अगर आप दोहरे उद्धरण में विशेषता मान लपेट ("), उदा

<MyTag attr="If a&lt;b &amp; b&lt;c then a&lt;c, it's obvious"/> 

अर्थ टैग MyTag पाठ If a<b & b<c then a<c, it's obvious साथ विशेषता attr साथ - ध्यान दें: &apos; उपयोग करने के लिए ' चरित्र से बचने के लिए कोई जरूरत नहीं।

आप लपेट तो विशेषता एकल उद्धरण (') में मानों तो आप इन अक्षरों से बचने चाहिए:

' with &apos; 
< with &lt; 
& with &amp; 

और आप " लिख सकते हैं के रूप में। > से &gt; के साथ विशेषता पाठ में की आवश्यकता नहीं है, उदा। <a b=">"/> अच्छी तरह से गठित एक्सएमएल है।

+5

एक्सएमएल को गुणों के मामले में उद्धरण के अंदर विशेष वर्णों से बचने की आवश्यकता क्यों होती है? केवल "या" को उद्धृत करने की आवश्यकता होगी ... और उस स्ट्रिंग के अंदर और कुछ भी सामग्री के रूप में माना जा सकता है! – Teddy

+1

मुझे लगता है कि यह बुरी तरह लिखित एक्सएमएल पार्सर्स और/या गलत एक्सएमएल के खिलाफ पूर्व सावधानी है। उदाहरण के लिए, यदि उद्धरण गुण छोड़े गए हैं ('<टैग attr = value>') – izogfif

+0

कोई विशेषज्ञ नहीं, लेकिन मुझे संदेह होगा कि यह एसजीएमएल के कारण एक ऐतिहासिक सावधानी है जिसका मूल रूप से HTML और अन्य प्रकार के मार्कअप लैंग्यू को परिभाषित करने के लिए उपयोग किया जाता था। – LMA1980

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