2011-08-19 101 views
0

有沒有辦法修改CodeMirror或XML模式定義腳本來啓用用戶在屏幕上看不到的幾個屬性的篩選?CodeMirror 2:如何過濾XML屬性?

所以我只是想找到屬性,並給他們被設置爲新類「顯示:無」

例如...

前:

<sample1 xns:id="e7b014d9-6271-4e32-921d-7488edfd6ea4">a</sample1> 
<sample2 xns:id="d3450e86-7264-4512-9891-6c7183257741">b</sample2> 
<sample3 xns:id="7f04f178-f235-4647-8584-c4e77f73fecf">c</sample3> 

後:

<sample1>a</sample1> 
<sample2>b</sample2> 
<sample3>c</sample3> 

而我不想從XML本身刪除屬性我只是想隱藏它們,因爲當我將編輯結果轉換回XML對象時,我需要它們。

+1

這不是CodeMirror的工作原理。它是一個代碼編輯器,它不會隱藏用戶的部分文本。 – Marijn

+0

我知道這不是它的工作原理。但我希望它能夠修改它以便像那樣工作。 – Gapipro

+0

版本3已經發布,現在可以執行[內嵌代碼摺疊](http://codemirror.net/demo/folding.html)(即只隱藏部分行)。我相信你可以設置一個插件來自動隱藏你不想看的屬性,只有當你想編輯它們時才能看到它們。 – 0b10011

回答

0

您可以嘗試使用xslt將架構轉換爲您想要的格式。不替換文件,但生成具有隱藏屬性的文件。

+0

你可以發佈你的方法的一個小樣本?因爲我的主要問題是將新生成的文件轉換回具有屬性的原始形式。 – Gapipro

0

這是我的C#代碼來完成這項工作。您可以輕鬆將其修改爲JavaScript。

public static string RemoveAttributes(
     string xmlString) { 
    string retXML = null; 
    XmlDocument xDoc = new XmlDocument(); 
    xDoc.LoadXml(xmlString); 
    XmlNode root = xDoc.DocumentElement; 
    if (xDoc.DocumentElement != null) { 
    XmlNodeList list = xDoc.SelectNodes(@"/"); 

    if (list != null) { 
     RemoteAttributes(list); 
     retXML = root.OuterXml; 
    } 
    } 

    return retXML; 
} 

private static void RemoteAttributes(XmlNodeList list) { 
    if (list != null) { 
    foreach (XmlNode node in list) { 
     if (node.Attributes != null) { 
     node.Attributes.RemoveAll(); 
     } 
     if (node.HasChildNodes) { 
     RemoteAttributes(node.ChildNodes); 
     } 
    } 
    } 
} 
+0

這是一種刪除屬性的方法,不要將它們隱藏在CodeMirror中.... – Gapipro