2011-08-19 98 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