XML Editor online

Code

    Export

    My documents

    Click a document to open it. They are stored only in this browser - nothing is uploaded. Clearing the browser's site data removes them, so download the ones you want to keep.

    AI Assistant

    Any AI can write with you - ChatGPT, Claude, Gemini, Copilot.

    1. Click Copy prompt.
    2. Paste it into your AI and say what it should write.
    The AI should

    The document travels in the link after the “#”, which no server sees. What you paste into your AI is handled by its provider.

    Save to your server

    The editor can send each saved version to your own server (a webhook), so your work is kept where you want it. Nothing is sent until you enter an address here.

    What your server receives

    A POST request with JSON (your server must allow CORS from https://xml.giit.ch):

    { "editor": "xml", "event": "save", "id": "…", "name": "Catalog",
      "content": "<?xml version=\"1.0\"?> …",
      "updated": "2026-01-15T09:30:00.000Z" }
    Embed the editor in your website
    <iframe src="https://xml.giit.ch/?embed=1" style="width:100%;height:80vh;border:0"></iframe>
    <script>
    const frame = document.querySelector('iframe');
    addEventListener('message', e => {
      if (e.origin !== 'https://xml.giit.ch' || e.source !== frame.contentWindow) return;
      if (e.data.type === 'xmleditor:ready')
        frame.contentWindow.postMessage({ type: 'xmleditor:load', name: 'Catalog',
          content: '<catalog>…</catalog>' }, 'https://xml.giit.ch');
      if (e.data.type === 'xmleditor:save') saveOnYourServer(e.data.content);
    });
    </script>

    Also possible: ?src=<URL of an XML file> opens a file, &webhook=<URL> saves this document there. The editor can also open in a window of its own (?embed=window), and your page can hand it its own AI prompt and a session key so the AI sends its result to your server (xmleditor:ai, xmleditor:key-request) - see "Use the editor on your own website" below the editor. Details are in llms.txt.

    Help

    How it works

    1. Write XML on the left - or start with New and one of the templates. The tree in the middle shows the elements, attributes, text, comments and CDATA as you type.
    2. Click a node in the tree to go to its place in the code; the cursor in the code shows its node in the tree. Fold elements with the arrow.
    3. Click a name, an attribute value or a text in the tree to edit it right there. Enter or a click elsewhere writes the change into the code (special characters escaped, one step for Undo), Escape cancels. The buttons of a row add a child element or an attribute, move the element up or down, or remove it.
    4. Search marks nodes whose name, value or text contains the words; the XPath field marks the nodes an XPath 1.0 expression selects (_: is the default namespace of the root).
    5. Problems (the first well-formedness error, undeclared namespace prefixes, ids used twice) are listed above the code with line and column - click one to go there.
    6. Node on the right shows the selected node; Insert has ready-made pieces; Convert formats, minifies and turns the document into JSON or YAML.
    7. My documents (the folder button at the top left) lists every document kept in this browser. Export saves XML, minified XML, JSON, YAML or plain text.

    The editor never loads a DTD, a schema or an external entity, and it does not expand entities declared in a DTD: their references stay as written.

    Keyboard shortcuts

    > after a start tag
    Adds the matching end tag
    Ctrl + /
    Comment lines in or out (<!-- -->)
    Ctrl + Enter
    Show the cursor's node in the tree
    Tab / Shift + Tab
    Indent / outdent
    Ctrl + Z / Y
    Undo / redo
    Ctrl + S / E
    Save (download .xml, or to your server) / export
    Ctrl + O
    My documents
    Ctrl + F
    Search in the tree (outside the code)

    XML'i çevrimiçi düzenleyin, canlı bir ağaçla

    XML Editörü kodunuzu ve öğe ağacını yan yana gösterir. Yazdığınız her şey hemen ağaçta görünür - öğeler, öznitelikler, metin, yorumlar, CDATA ve ad alanları - ve herhangi bir düğüme tıklamak sizi koddaki yerine götürür. Adları, değerleri ve metni doğrudan ağaçta da düzenleyebilir, XPath sorguları çalıştırabilir ve belgeyi JSON veya YAML'a dönüştürebilirsiniz.

    Her şey tarayıcınızda çalışır. Belgeler yüklenmez; kayıt ve reklam yoktur.

    Editörün yapabilecekleri

    Vurgulamalı kod

    Kendi renklerinde etiketler, öznitelikler, değerler, varlıklar, yorumlar ve CDATA, satır numaraları, kendiliğinden kapanan bitiş etiketleri ve satır ve sütunlarıyla açık bir sorun listesi.

    Öğe ağacı

    Öğeleri katlayın ve açın; öznitelikleri, metni, yorumları, işleme talimatlarını ve ad alanlarını görün ve seçili düğümün yolunu izleyin.

    Ağaçta düzenleyin

    Öğeleri ve öznitelikleri yeniden adlandırın, değerleri ve metni değiştirin, öğe ekleyin, taşıyın ve kaldırın - özel karakterler kaçışlanarak, küçük düzenlemeler olarak koda yazılır.

    XPath ve arama

    Bir XPath 1.0 alanı eşleşen düğümleri işaretler; arama adları, değerleri ve metni bulur. Belgenin ad alanı önekleri XPath'te çalışır.

    Her dosyayla güvenli

    Hiçbir DTD, şema veya harici varlık asla yüklenmez ve hiçbir varlık genişletilmez; bu yüzden XXE ve varlık bombaları çalışmaz.

    Biçimlendirme ve dönüştürme

    Belgeyi girintileyin veya küçültün ya da JSON veya YAML'a dönüştürün: öznitelikler @name, metin #text, yinelenen öğeler liste olarak.

    Nasıl çalışır

    1. Başlayın - "Yeni" altından bir şablon seçin, bir .xml dosyası açın veya XML kodu yapıştırın.
    2. Düzenleyin - koda yazın veya ağaçtaki değerlere tıklayın; kodun üstündeki sorunlar neyin iyi biçimli olmadığını söyler.
    3. Dışa aktarın - XML'i, küçültülmüş bir kopyayı, JSON'u, YAML'ı veya düz metni kaydedin.

    Editörü kendi web sitenizde kullanın

    Her https sayfası (ve localhost) editörü bir <iframe> ve ?embed=1 ile yerleştirebilir - kayıt yok, anahtar yok. Yerleştirildiğinde editör bu metni gizler ve bir Kaydet düğmesi gösterir. Belgeyi içeri almanın ve dışarı vermenin iki yolu vardır.

    1. Bir bağlantıdan dosya açın, sunucunuza kaydedin

    src= bir dosya açar (sunucunuz CORS'a izin vermelidir), webhook= ise "Kaydet"in (Ctrl+S) belgeyi o adrese göndermesini sağlar. Authorization: Bearer … başlığı için &token=…, her değişiklikten sonra kaydetmek için &auto ekleyin.

    <iframe src="https://xml.giit.ch/?embed=1&src=https://your-site.com/data/catalog.xml&webhook=https://your-site.com/save.php"
            allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>

    Webhook, JSON içeren bir POST alır: { editor: "xml", event: "save", id, name, content, updated }. Bunu saklayan küçük bir PHP betiği:

    <?php
    header('Access-Control-Allow-Origin: https://xml.giit.ch');
    header('Access-Control-Allow-Headers: Content-Type, Authorization');
    header('Access-Control-Allow-Methods: POST, OPTIONS');
    if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
    if (($_SERVER['HTTP_AUTHORIZATION'] ?? '') !== 'Bearer SECRET') { http_response_code(403); exit; }
    $d = json_decode(file_get_contents('php://input'), true);
    $name = preg_replace('/[^\w\- ]/u', '_', $d['name']);
    file_put_contents(__DIR__ . "/data/$name.xml", $d['content']);
    echo '{"ok":true}';

    2. Belgeyi sayfanız tutar (postMessage)

    Editör xmleditor:ready der, sayfanız xmleditor:load ile yanıt verir, editör xmleditor:loaded, gerçek düzenlemelerde xmleditor:change ve kullanıcı kaydettiğinde xmleditor:save bildirir. Sayfanız xmleditor:get (geçerli durum) veya xmleditor:save (Kaydet'e basma) gönderebilir. Kaydetme böylece kendi oturum açma ve oturum sisteminiz üzerinden yapılır.

    <iframe id="ed" src="https://xml.giit.ch/?embed=1" allow="clipboard-write" style="width:100%;height:800px;border:0"></iframe>
    <script>
    const ed = document.getElementById('ed');
    const ORIGIN = 'https://xml.giit.ch';
    
    addEventListener('message', async e => {
      if (e.source !== ed.contentWindow || e.origin !== ORIGIN) return;
      const m = e.data;
      if (m.type === 'xmleditor:ready') {               // editör hazır: belgeyi ona verin
        ed.contentWindow.postMessage({
          type: 'xmleditor:load',
          name: 'Catalog',
          content: await (await fetch('/data/catalog.xml')).text()
        }, ORIGIN);
      }
      if (m.type === 'xmleditor:change') document.title = '● not saved';     // gerçek bir düzenleme
      if (m.type === 'xmleditor:save') {                // kullanıcı "Kaydet"e tıkladı
        await fetch('/api/save', { method: 'POST', headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ name: m.name, content: m.content }) });
        document.title = 'Saved';
      }
    });
    
    // Kendi sayfanızda bir kaydet düğmesi: yanıt xmleditor:save olarak gelir
    function saveNow() { ed.contentWindow.postMessage({ type: 'xmleditor:get' }, ORIGIN); }
    </script>

    Sayfanızın içinde Yapay Zekâ Asistanı: çerçeve içinde de çalışır. iframe üzerinde allow="clipboard-write" ile "İstemi kopyala" panoyu doğrudan kullanır (aksi halde editör eski kopyalama komutuna geri döner veya istemi elle kopyalamanız için gösterir). Yapay zekânın gönderdiği bir bağlantı başka bir web sitesinin içindeki editöre ulaşamaz; bu yüzden editör, yapay zekâya ve kullanıcıya bunun yerine yapay zekânın yanıtının tamamını editöre yapıştırmasını söyler - veya editörü kendi penceresinde açın.

    3. Kendi penceresinde

    window.open("https://xml.giit.ch/?embed=window", "xmleditor-17") tam editörü kendi penceresinde açar ve aynı mesajları window.opener ile konuşur. Yapay zekâdan gelen bağlantılar ona orada ulaşır. xmleditor:load ayrıca context: { host, title, rules } taşıyabilir - yapay zekâ istemi bu durumda belgenin nereye ait olduğunu söyler ve kurallarınıza uyar - ve hook: { url, token }, yalnızca bu belge için olan ve asla saklanmayan bir webhook. Kaydedilmemiş değişikliklerle pencereyi kapatmak xmleditor:closing gönderir.

    4. Kendi sunucunuz üzerinden yapay zekâ

    Editöre kendi isteminizi, sitenizde bir adresi ve bu editör oturumu için bir anahtarı verin. Yapay zekâ iletişim kutusu bu durumda sitenize "Bağlı" olduğunu, yapay zekâya ne söylediğinizi ve geçerli belgeyi değiştir veya yeni bir belge oluştur seçimini gösterir; İstemi kopyala hepsini bir araya getirir. Yapay zekâ sonucunu anahtarla sunucunuza gönderir ve sayfanız onu editörde açar - yeni bir belge ayrı açılır ve kullanıcının tarayıcısında kalır. Editör oturumu başına bir anahtar: editör açık olduğu sürece geçerli kalır ve editör yalnızca anahtarı yokken xmleditor:key-request ile ister. Editör anahtarı asla kendisi göndermez ve asla saklamaz; adres kendi alan adınızda veya onun bir alt alan adında https olmalıdır.

    const key = async () => (await fetch('/api/ai-key.php?doc=17')).json();   // editör oturumu başına bir anahtar
    const k = await key();
    ed.contentWindow.postMessage({ type: 'xmleditor:load', name: 'Catalog', content, ai: {
      label: 'My Site', prompt: 'Keep the sku attributes. Prices in CHF.',
      endpoint: 'https://your-site.com/api/ai-result.php', key: k.key } }, ORIGIN);
    // xmleditor:loaded içindeki id'yi hatırlayın ve başka id'li change/save/closing mesajlarını yok sayın
    // yalnızca editörün anahtarı yokken:
    if (m.type === 'xmleditor:key-request') { const k = await key(); ed.contentWindow.postMessage({ type: 'xmleditor:ai', key: k.key }, ORIGIN); }
    // editör açıkken sunucunuza her dakika bildirin; editörü veya sayfayı kapatmak anahtarı geçersiz kılar
    setInterval(() => fetch('/api/ai-key.php?alive=' + k.key.slice(0, 8)), 60000);
    // sunucunuzda bir sonuç var (polling, SSE …): target "current" veya "new" olur
    ed.contentWindow.postMessage({ type: 'xmleditor:load', name: 'Catalog', content: draft, from: 'ai', target }, ORIGIN);

    Anahtarları en az 128 rastgele bitle oluşturun, yalnızca özetlerini (hash) saklayın, her birini oturum açmış kullanıcıya, belgeye ve bu editör oturumuna bağlayın, oturum başına bir tane oluşturun, yalnızca sayfanız oturumu açık bildirdiği sürece geçerli tutun ve editör veya sayfa kapandığında geçersiz kılın.

    Protokolün tamamı llms.txt dosyasındadır - bir yapay zekâya verin, sisteminiz için bağlantıyı o kursun. LaTeX Editörü ve SVG Editörü latexeditor: ve svgeditor: önekleriyle aynı şekilde çalışır.

    Sıkça sorulan sorular

    XML'im yükleniyor mu?

    Hayır. Editör tamamen tarayıcınızda çalışır. Kendi sunucunuza bir webhook kurmadığınız sürece belgeleriniz asla bir sunucuya gönderilmez.

    Editör XML'imi kontrol ediyor mu?

    Evet. Tarayıcının kendi XML ayrıştırıcısını kullanır ve ilk iyi biçimlilik hatasını satır ve sütunuyla, ayrıca bildirilmemiş ad alanı öneklerini ve iki kez kullanılan id'leri gösterir. Bir DTD'ye veya XML Schema'ya göre doğrulama yapmaz.

    DTD veya harici varlıklar içeren XML'i açmak güvenli mi?

    Evet. Editör hiçbir zaman bir DTD, şema veya harici varlık yüklemez ve bir DTD'deki varlıkları asla genişletmez; bu yüzden XXE ve varlık genişletme saldırıları çalışmaz. Bu tür varlıklara yapılan başvurular metinde yazıldığı gibi kalır.

    XPath'i nasıl kullanırım?

    Ağacın üstüne bir XPath 1.0 ifadesi yazın, örneğin //book[price > 30]/title. Eşleşen düğümler ağaçta işaretlenir; oklar birinden diğerine gider. Belgede bildirilen önekler çalışır ve _: kök öğenin varsayılan ad alanını ifade eder.

    XML'i JSON veya YAML'a dönüştürebilir miyim?

    Evet. Dönüştür veya Dışa aktar altında belge JSON veya YAML olur: öznitelikler @name, metin #text, yinelenen öğeler liste olarak.

    Belgelerim nereye kaydediliyor?

    Yalnızca tarayıcınıza. Belgeleri açmak, yeniden adlandırmak, çoğaltmak, indirmek veya silmek için sol üstteki klasör düğmesine (Belgelerim) tıklayın. Tarayıcınızın site verilerini temizlemek onları siler; bu yüzden saklamak istediklerinizi indirin - veya editörün onları kendi sunucunuza göndermesine izin verin ("Sunucuya kaydet").

    Bir yapay zekâ XML Editöründe yazabilir mi?

    Evet, her yapay zekâ - ChatGPT, Claude, Gemini, Copilot veya kodlama aracınızdaki yapay zekâ. "Yapay Zekâ Asistanı"na, ardından "İstemi kopyala"ya tıklayın, istemi yapay zekânıza yapıştırın ve ne yazması gerektiğini söyleyin. Yapay zekâ bir bağlantıyla yanıt verir; ona tıklayın, belge editörünüzde görünür. "Geri al" her değişikliği geri alır.

    Editörü kendi web sitemde kullanabilir miyim?

    Evet. Bir iframe ile yerleştirin ve belgeleri postMessage ile alıp verin ya da kaydedilen her sürümü bir webhook ile sunucunuza göndermesine izin verin. Örnekler için Editörü kendi web sitenizde kullanın bölümüne bakın.

    XML Editörü ücretli mi?

    Hayır. Editör ücretsizdir; reklam ve kayıt yoktur.