【问题标题】:CodeMirror 2: How to filter out xml attributes?CodeMirror 2:如何过滤掉 xml 属性?
【发布时间】:2011-08-19 13:13:32
【问题描述】:

有没有办法修改 CodeMirror 或 XML 模式定义脚本来过滤用户不应该在屏幕上看到的少数属性?

所以我只想找到那些属性并给它们设置为'display:none'的新类

例如...

之前:

<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 对象时我需要它们。

【问题讨论】:

  • 这不是 CodeMirror 的工作方式。它是一个代码编辑器,它不会向用户隐藏部分文本。
  • 我知道它不是这样工作的。但我希望它修改它以像那样工作。
  • 版本 3 已经发布,现在可以执行inline code folding(即只隐藏一行的一部分)。我相信您可以设置一个插件来自动隐藏您不想查看的属性,并且只有在您想要编辑它们时才能看到它们。

标签: xml filter codemirror


【解决方案1】:

您可以尝试使用 xslt 将架构转换为您想要的格式。不是替换文件而是生成具有隐藏属性的anather。

【讨论】:

  • 你能发布一个你的方法的小样本吗?因为我的主要问题是将新生成的文件转换回具有属性的原始形式。
【解决方案2】:

这是我的 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);
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多