Aslında
<img src="imgtag.gif" alt="<img>" />
geçerli bir HTML değil ve geçerli bir XML de değil.
'<' Ve '>' özellik dizeleri içindeki geçerli karakterler olmadığından geçerli bir XML değil. Karşılık gelen XML varlıkları kullanılarak kaçmaları gerekir & lt; ve & gt;
HTML'de kısa kapatma formuna izin verilmediğinden (ancak XML ve XHTML'de doğrudur) geçerli bir HTML değildir. 'İmg' etiketi, HTML 4.01 spesifikasyonuna göre örtük olarak kapalı bir etikettir. Bu, manuel olarak kapatmanın gerçekten yanlış olduğu ve diğer tüm etiketleri iki kez kapatmaya eşdeğer olduğu anlamına gelir.
HTML'deki doğru sürüm
<img src="imgtag.gif" alt="<img>">
ve XHTML ve XML'deki doğru sürüm
<img src="imgtag.gif" alt="<img>"/>
Verdiğiniz aşağıdaki örnek de geçersiz
<
tag
attr="5"
/>
Bu geçerli bir HTML veya XML değil. Nitelikler ve kapanış '>' istedikleri yerde olsa da, etiketin adı '<' işaretinin hemen arkasında olmalıdır. Geçerli XML aslında
<tag
attr="5"
/>
Ve işte başka bir komik olanı: "veya" karakterini özellik alıntılama karakteriniz olarak kullanmayı seçebilirsiniz.
<img src="image.gif" alt='This is single quoted AND valid!'>
Gönderilen diğer tüm nedenler doğrudur, ancak HTML'yi ayrıştırmayla ilgili en büyük sorun, insanların genellikle tüm sözdizimi kurallarını doğru bir şekilde anlamadığıdır. Tarayıcınızın etiket çıkışınızı HTML olarak yorumlaması, geçerli HTML yazdığınız anlamına gelmez.
Edit: Ve hatta stackoverflow.com geçerli ve geçersiz tanımı ile benimle aynı fikirde. Düzeltilmiş sürümüm varken geçersiz XML / HTML'niz vurgulanmaz.
Temel olarak, XML normal ifadelerle ayrıştırılamaz. Ancak bunun için de bir neden yok. Her dil için çok sayıda XML ayrıştırıcısı vardır. SAX ayrıştırıcılar, DOM ayrıştırıcılar ve Çekmeli ayrıştırıcılar arasında seçim yapabilirsiniz. Tüm bunların bir normal ifade ile ayrıştırmaktan çok daha hızlı olması garanti edilir ve daha sonra elde edilen DOM ağacında XPath veya XSLT gibi harika teknolojiler kullanabilirsiniz.
Bu nedenle cevabım: XML'yi regexps ile ayrıştırmakla kalmıyor, aynı zamanda kötü bir fikir. Milyonlarca mevcut XML ayrıştırıcısından birini kullanın ve XML'in tüm gelişmiş özelliklerinden yararlanın.
HTML, kendi başınıza ayrıştırmayı denemek için çok zor. Birincisi, yasal sözdiziminin farkında olmadığınız birçok küçük inceliği vardır ve ikincisi, vahşi HTML HTML'nin sadece büyük bir kokuşmuş yığınıdır (sapmamı alırsınız). Etiket çorbası gibi HTML'yi işlemede iyi bir iş yapan çeşitli gevşek ayrıştırıcı kütüphaneleri var, sadece bunları kullanın.