CodeMirror 2:如何过滤掉xml属性?

发布于 2024-11-30 07:57:15 字数 602 浏览 0 评论 0原文

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

所以我只想找到这些属性并为它们提供设置为“display:none”的新类

例如...

before:

<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>

after:

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

而且我不想从 XML 本身删除属性我只想隐藏它们,因为当我将编辑结果转换回 XML 对象时我需要它们。

Is there a way to modify CodeMirror or XML mode definition script to enable filtering of few attributes that user shouldn't see on screen?

So I just want to find that attributes and give them new class that is set to 'display:none'

For example...

before:

<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>

after:

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

And I don't want to delete attributes from XML itself I just want to hide them, because I need them when I convert editing result back to XML object.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灼疼热情 2024-12-07 07:57:15

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

You may try to use xslt to convert schema into format you want. Not replace file but generate anather with hiden attributes.

四叶草在未来唯美盛开 2024-12-07 07:57:15

这是我完成这项工作的 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);
      }
    }
  }
}

Here is my C# code to do the job. You can easily modify it into 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);
      }
    }
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文