XMLNotepad是一款编程人员都在使用的xml文本编辑器。一款强大的xml文本编辑工具XMLNotepad。新版本支持编程智能输入,可以通过输入C,++,C#,Java和PHP函数,类,方法,结构,成员和变量的部分名称从候选项中输入;除了用户定义的函数和方法名称之外,它还支持以下API的补充输入以及标准类和方法名称,并支持智能搜索。您只需要输入搜索字符的一部分即可显示候选搜索词。如果指定单词,搜索结果将立即显示。您可以通过按两次Shift键显示程序并定义位置来显示程序的功能和变量。 Grep按优先级显示搜索结果。您只需要在搜索对话框中输入条件,即可在列表中显示搜索结果。由于此工具具有内置的预览功能,因此用户可以立即参考搜索位置,通过索引进行高速搜索,支持Grep替换的生成历史记录,支持替换前的生成恢复;需要它的用户可以下载体验。
使用说明:
XML记事本提供了一个简单直观的用户界面,用于浏览和编辑XML文档。有四种安装方法:
ClickOnce安装程序:这是最方便的,直接从Web浏览器安装。
独立下载的安装程序,如果您需要离线操作。
只需下载zip文件,将其复制到要安装的计算机上,在该计算机上解压缩该文件并运行xmlnotepadsetup.msi。
Windows MSIX安装程序:如果需要受信任的Windows安装程序
您还可以按如下方式使用WinGet:winget安装XmlNotepad
设计与实施
在github存储库中,您将找到核心XmlNotepaddll项目,用于构建XmlNotepad.exe的Application的XmlDiff项目,用于XML diff函数的库项目,用于XmlNotepadSetup的.msi安装程序的UnitTests项目以及用于测试XML记事本。
以下DGML图显示了主要UI类之间的关系。
主窗体包含从TaskList到主XmlTreeView的所有UI元素。调整大小介于两者之间。
这是对话框的起点,例如FormSearch,FormSchemas,FormOption和FormAbout。
主选项卡控件包含XmlTreeView和XsltViewer,用于显示XSL输出。 XmlTreeView在左侧包含一个TreeView,在右侧包含一个NodeTextView,并协调两个视图之间的滚动。 TreeView和NodeTextView都使用TextEditorOverlay组件来提供相同的IntelliSense编辑功能。 XmlTreeView实现IFindTarget,“查找”对话框(FormSearch)使用IFindTarget来实现搜索/替换功能。
“查找”对话框支持全文,正则表达式或XPath表达式,并且可以按名称或值进行过滤。
在这里,您将看到XPath搜索,该搜索还提供了一个表,用于输入查询中使用的名称空间前缀映射。
验证,IntelliSense和自定义编辑器
最大的新功能是IntelliSense,它由SchemaCache提供的XML Schema信息驱动。
例如,如果您的元素或属性由XSD simpleType定义,并且此simpleType包含
枚举构面列表,那么您将获得一个类似于以下内容的下拉列表:
这种工作方式是在每次编辑操作之后运行Checker,以验证文档并报告TaskList中的错误。此过程还将System.Xml.Schema.XmlSchemaType信息放在XmlDocument中的每个元素和属性上。
然后,在编辑节点的值时,TextEditorOverlay使用XmlIntelliSenseProvider检索可能值的列表。
在上面的示例中,它从simpleType枚举返回一个值。
对于树视图中的元素名称IntelliSense,XmlIntelliSenseProvider再次调用Checker来捕获System.Xml.Schema.XmlSchemaValidator上的GetExpectedParticles和GetExpectedAttributes,然后使用它们提供IntelliSense。
TextEditorOverlay还支持自定义编辑器,例如DateTimeEditor或UriBuilder或ColorBuilder。定制编辑器有两种类型:IXmlEditors(它们是替换默认TextBox的嵌入式编辑器)和IXmlBuilders(它们是弹出对话框,例如OpenFileDialog或ColorDialog)。
编辑器的类型是从模式类型信息派生的-DateTimeEditor中的结果为“ xs:date”,“ xs:time”,“ xs:datetime”,而UriBuilder中的结果为“ xs:anyURI”。您还可以在“ http://schemas.microsoft.com/Visual-Studio-IntelliSense”命名空间中使用自定义的“ vs:builder”属性来注释体系结构。
无限撤消/重做
为了实现撤消/重做,我使用Undo和Redo方法来遵循Command对象的常规设计模式。 UndoManager将这些收集在列表中。然后,UndoManager的状态控制Undo / Redo MenuItems的启用/禁用状态。当用户选择“撤消”菜单项时,将在活动命令上调用“撤消”方法,并且该命令将被推入“重做”堆栈。
编辑器中的某些操作会在树中引起许多编辑,包括所有替换操作和编辑名称空间属性的值。 (更改命名空间属性的值时,需要使用新的命名空间URI重建绑定到命名空间的每个XmlNode,这显然会影响树中的许多节点!)因此,使这些操作成为原子撤消操作,有一个CompositeCommand对象,其中包含较小的编辑命令列表,并且此CompoundCommand放置在UndoManager中。
其他更简单的命令对象包括以下各项,它们全部在XmlTreeNode和XmlNode对象上运行:
PasteCommand之所以特别,是因为它从剪贴板中删除了随机的XML文本,并在树中当前所选元素的上下文中对其进行了解析,从而继承了作用域中的名称空间。辅助类TreeData使用特殊的XmlTextReader构造函数,该构造函数将XmlParserContext作为输入。
单元测试
我必须很好地测试新的XML记事本,并且正在寻找借口使用新的Visual Studio UnitTest项目。
UnitTest在Visual Studio的“测试”菜单下的“测试资源管理器”中运行,启动XML记事本并执行我编写的所有测试方法。
测试完成后,可以右键单击“测试结果”窗口,然后选择“代码覆盖率结果”。
总结了每个功能覆盖多少个块。您可以双击列表中的一行以显示使用颜色编码的源代码视图,以显示确切的代码覆盖率。这使我很容易将代码覆盖率提高到大约85%。
唯一的技巧是,在调试器下运行测试时,您将不会获得代码覆盖,并且UnitTest项目在您的解决方案旁边创建了一个文件“ localtestrun.testrunconfig”和“ XmlNotepad.vsmdi”,您不应丢失它。
如果这样做,代码覆盖率将无法正常工作。
软件功能:
Intellisense支持XML模式
查找一个支持XPath的对话框
支持XInclude
通过XSLT输出的内联查看器支持XSLT转换
csv文件自动转换
有关XML文档的便捷统计信息
2个类似XML文档的XML差异比较
充满活力的社区,其中包含许多更新和错误修复
软件特色:
在树形视图和文本视图中进行增量搜索,以在键入时导航到最匹配的节点。
使用简单的可互操作XML格式,剪切/复制/粘贴具有完整的名称空间支持。
支持拖放操作,即使在XML记事本的不同实例之间以及在文件系统中,您也可以轻松地操纵树。
无限次撤消/重做所有编辑操作。
根据预期的元素和属性,大文本节点值和IntelliSense可以就地,弹出和多行编辑。
可以通过选项对话框配置字体和颜色。
完整的查找/替换对话框,支持正则表达式和XPath表达式。
在大型XML文档上表现良好(大约一秒钟内加载了3 MB文档)。
在编辑过程中执行即时XML模式验证,并显示任务列表窗口中显示的错误和警告。
支持自定义编辑器日期,日期时间,时间和颜色数据类型。
HTML查看器,用于显示XSLT转换结果。
内置XML Diff工具。