2011-04-18 8 views
25

Bir Java programının yapısını depolamak için kullanılacak bir XML dosyası oluşturmak istiyorum. Java programını başarılı bir şekilde ayrıştırabilir ve etiketleri gerektiği gibi oluşturabilirim. Java kaynak kodu çok sayıda varlık referansı ve &, <, <, >, & gibi ayrılmış karakterler kullanabileceğinden, bu sorun kaynak kodlarımı etiketlerim içine dahil etmeye çalıştığımda ortaya çıkar. Geçerli bir XML oluşturamıyorum. Bunun gibiXML öznitelik değerlerine <, > vb. Nasıl dahil edebilirim?

<?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> 

ancak sorun if veya diğer ifadeleri valide alma XML engeller onları & veya diğer saklıdır sembollerin çok şey var koşullu ifadeler geçerli:

Benim XML böyle gitmeli. Tüm bu veriler (kaynak kodu) kullanıcı tarafından verildiğinden, üzerinde çok az kontrol var. Karakterlerden kaçmak zaman açısından çok maliyetli olacaktır.

Öğe metninden çıkmak için CDATA kullanabilir, ancak koşullu ifadeleri içeren öznitelik değerleri için kullanılamaz. Java programını ayrıştırmak ve etiketler için öznitelikleri ve içeriği almak için Antlr Java dilbilgisi kullanıyorum. Bunun için başka bir çözüm var mı?

cevap

48

Sen xml için

" to &quot; 
' to &apos; 
< to &lt; 
> to &gt; 
& to &amp; 

kaçmak zorunda kalacaktır. XML'de

+0

Bir + (artı) –

+1

@LarsVandeDonk "+" öğesinin nasıl olduğu, XML'de kaçmasına gerek yok. Belki de URL kaçışından bahsediyordunuz? – izogfif

7

sen (") çift tırnak özellik değerlerini kaydırmak eğer

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

kaçmak gerekir, örneğin niteliklerini

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

metin If a<b & b<c then a<c, it's obvious ile öznitelik attr ile etiketi MyTag anlamı - not: ' karakteri kaçmak için &apos; kullanmaya gerek.

Eğer sarın Eğer

tek tırnak ( ') değerleri o zaman bu karakterleri kaçmayı gerektiğini bağlıyor:

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

ve olduğu gibi " yazabilirsiniz. 'dan &gt; ile özniteliğinde, örn. <a b=">"/> iyi biçimlendirilmiş XML'dir.

+5

XML, özellik değerleri söz konusu olduğunda tekliflerin içindeki özel karakterlerin neden kaçmasını gerektiriyor? Sadece "veya" alıntılanması gerekir ... ve bu dizenin içindeki herhangi bir şey sadece içerik olarak düşünülebilir! – Teddy

+1

Kötü yazılmış XML ayrıştırıcılarına ve/veya yanlış XML'ye karşı bir ön uyarıdır. Öznitelikler atlanır ('') – izogfif

+0

Uzman değil, bunun HTML ve diğer tür biçimlendirmelerini tanımlamak için kullanılan SGML nedeniyle tarihi bir önlem olduğundan şüphelenirim: – LMA1980