- 桌面应用
- 开发工具
【免费下载链接】XmlNotepad
XML Notepad provides a simple intuitive User Interface for browsing and editing XML documents.
本文以 XML Notepad 的 Options 选项对话框(docs/help/options.md)为主线,系统讲解其从"视图菜单入口"到"各配置分组"的完整使用指南,并结合 FormOptions.cs、Settings.cs 等源码与 XmlNotepad.template.settings 模板文件,剖析每一项设置的默认值、取值范围与底层作用机制。读完本文,你将能够熟练配置 XML Notepad 的主题与字体、格式化与校验行为、自动更新策略,并能通过设置文件在团队中批量预置统一的工作环境。
入口与整体结构
Options 对话框通过View 菜单 → Options...打开(menus.md),其底层实现位于 FormOptions.cs。从源码看,该对话框基于 WinForms 的PropertyGrid构建:
- 所有可配置项由
FormOptions.UserSettings类中的属性定义,每个属性通过SRCategory、LocDisplayName、SRDescription三个特性标注分组(Category)、显示名称与描述文本(对应 StringResources.resx 中的本地化资源); - 对话框维护一份本地快照(
UserSettings的私有字段),点击OK后才调用Apply()一次性写回底层Settings对象(FormOptions.cs),点击Cancel或按Esc键则直接关闭且不生效(ProcessDialogKey处理 Esc 键); - Reset按钮会弹出确认框,将所有选项恢复为内置默认值(
Reset()方法),默认值清单可对照 Settings.cs 的SetDefaults()。
对话框中各项设置的最终存储位置由Settings Location决定,详见下文。默认设置文件是%APPDATA%\Microsoft\Xml Notepad\XmlNotepad.settings(settings.md)。
Analytics:匿名使用数据开关
该分组控制是否收集匿名的应用使用数据。首次安装启动时 XML Notepad 会弹窗询问是否允许统计(analytics.md),你随时可以通过 Options 中的Allow analytics开关重新决定。
- 对应设置项:
AllowAnalytics(默认False); - 首次询问的判定逻辑位于 FormMain.cs:当
AnalyticsClientId为空且AllowAnalytics为真时弹窗,选择会写入设置文件且不再重复出现; - 企业批量部署时可通过环境变量
XML_NOTEPAD_DISABLE_ANALYTICS=1全局禁用(在 Program.cs 中读取); - 若希望用户根本看不到该选项,可在设置文件中将
AnalyticsClientId设为disabled,此时 FormOptions.cs 会通过MemberFilter将 "AllowAnalytics" 属性从属性网格中隐藏。
颜色主题、颜色与字体
该分组允许选择Light(浅色)/ Dark(深色)两套主题,并可逐项定制各类节点使用的颜色以及树视图字体。
- 主题设置项为
Theme(枚举ColorTheme.Light/ColorTheme.Dark,默认Light); - 两套主题的颜色分别存放在
LightColors与DarkColors(类型ThemeColors)中。内置默认值定义于 Settings.cs 的GetDefaultColors(),例如浅色主题下:Element = RGB(0, 64, 128)、Attribute = Maroon、Comment = Green、PI = Purple、Text = Black、Background = White、ContainerBackground = AliceBlue;深色主题下:Background = RGB(30, 30, 30)、ContainerBackground = RGB(37, 37, 38) 等; - 可定制的颜色项(每个颜色下拉都附带调色板)包括:Element(元素)、Attribute(属性)、Comment(注释)、PI(处理指令)、Text(文本)、CDATA、Schema aware text color(由 schema 提升的文本)、Background(工作区背景)、Container background(非文本节点背景)、Editor background(文本编辑器背景);
- 字体设置项为
Font(默认Courier New10pt,SetDefaults()与Reset()均如此);确认时Apply()会把字体拆分为FontFamily、FontSize、FontStyle、FontWeight四个独立设置写入文件(FormOptions.cs); - 主题与颜色的切换由
Theme属性 setter 联动:切换主题时会先SaveColors()保存当前主题颜色快照,再LoadColors()载入另一套(FormOptions.cs)。
Editor:文本编辑器与文件重载行为
该分组包含两项:
- Default text editor(
TextEditor,默认%SystemRoot%\notepad.exe):当 XML 文件无效、无法在 XML Notepad 中打开时,会调用该外部编辑器打开文件。调用逻辑位于 FormMain.cs 的OpenTextFile():若设置值为空或文件不存在,则回退到系统目录的 notepad.exe; - Prompt before reload(
PromptOnReload,默认True):控制当 XML 文件在磁盘上被修改时是否先弹窗确认再自动重载。在 FormMain.cs 中,若文档有未保存修改(Dirty)仍会先询问;若无未保存修改且PromptOnReload为False,则直接重载文件。
Formatting:保存格式化与空白处理
该分组集中了保存 XML 文件时的格式化选项(对应Formatting Options分组),包括:
| 设置项 | 设置键 | 默认值 | 说明 |
|---|---|---|---|
| Auto format on save | AutoFormatOnSave | True | 保存时是否自动格式化 XML |
| Indent level | IndentLevel | 2 | 保存格式化时使用的缩进字符个数 |
| Indent char | IndentChar | Space | 缩进字符(空格或 Tab,枚举IndentChar) |
| New line character | NewLineChars | \r\n | 换行符序列,\r表示 0xD、\n表示 0xA,\r\n即 Windows 风格换行(字符串在文件中以\r\n转义形式存储) |
| TreeView indent pixels | TreeIndent | 12 | 树视图中每级缩进的像素数 |
| Preserve Whitespace | PreserveWhitespace | False | 打开文件时是否保留全部空白。为True时树中会显示所有 Whitespace 节点,保存时这些空白也会原样写回 |
| No byte order mark on save | NoByteOrderMark | False | 保存时是否为 UTF-8(EF BB BF)或 UTF-16(FF FE)写入 BOM |
| Attributes on a new line | AttributesOnNewLine | False | 格式化时每个属性独占一行并缩进对齐 |
PreserveWhitespace的底层作用体现在 DomLoader.cs:它直接决定XmlDocument.PreserveWhitespace属性的取值,从而影响文档加载与保存。此外,该选项还会影响 XSLT 输出(见 XSLT 一节)。
Language:XSD 注解语言选择
Language(默认空字符串)用于指定从关联 XSD schema 的注解中选取哪种语言的文档说明。它主要作用于:
- schema 感知的提示(Tooltip):XmlTreeView.cs 调用
SchemaCache.GetAnnotation(..., "Language")读取对应语言的注解; - schema 文档化内容展示:
SchemaCache.GetDocumentation(..., "Language")(XmlTreeView.cs)。
即:当 XSD 中同一元素提供了多种语言的<xs:documentation>时,此设置决定树视图显示哪一种。对应分组为Language Options。
Long Lines:长行处理策略
Long Lines分组解决"单行过长"的编辑体验问题,涉及三个设置:
| 设置项 | 设置键 | 默认值 | 说明 |
|---|---|---|---|
| Maximum Line Length | MaximumLineLength | 10000 | 触发"重新格式化"提示的最大行长阈值 |
| Autoformat Long Lines | AutoFormatLongLines | False | 超过阈值时是否自动格式化,而不再弹窗询问 |
| Maximum Value Length | MaximumValueLength | 32767(short.MaxValue) | 文本编辑框中单行可输入的最大长度,直接映射到文本编辑器的MaximumLineLength(NodeTextView.cs) |
长行检查逻辑位于 NodeTextView.cs 的CheckTextLength():当某行长度超过MaximumLineLength时,若AutoFormatLongLines为真则直接调用FormatLines()自动折行;否则弹出 Yes/No/Cancel 询问,选择 Yes 才进行格式化,Cancel 取消本次编辑。
Schema Options:schema 感知文本提升
该分组控制树视图是否展示"提升"的特殊节点文本,即把具有特殊名字的子节点文本显示到父节点行上:
- Show schema aware text(
SchemaAwareText,默认True):开启后,将 XSD 中定义为 key/id 的元素内容提升显示到父元素名称行; - Special names(
SchemaAwareNames,默认"id,name,title,key"):即使没有 schema 信息,名字属于该列表的子节点文本也会被提升。
对应描述见 StringResources.resx,分组名为Schema Options。源码中提升逻辑配合SchemaAwareTextColor颜色(浅色主题默认 RGB(0,134,198))将提升文本以特殊颜色呈现在树中。
Settings Location:设置文件存放位置
SettingsLocation(枚举:Portable/Local/Roaming,默认逻辑为Auto)决定XmlNotepad.settings文件存放目录(settings.md):
| 名称 | 位置 |
|---|---|
| Portable | 存放在XmlNotepad.exe所在安装目录 |
| Local | %LOCALAPPDATA%\Microsoft\Xml Notepad\ |
| Roaming | %APPDATA%\Microsoft\Xml Notepad\ |
- Portable便于通过
xcopy将整个目录复制到其他机器后获得相同设置;若程序安装在只读目录(如c:\Program Files),该选项不可用; - 更改此选项会移动现有设置文件;若多个位置都存在
XmlNotepad.settings,将按 Portable → Local → Roaming 的优先级取第一个; - 在 Settings.cs 中,
GetLocation()兼容旧版整数存储并默认SettingsLocation.Auto,SetLocation()则把枚举值序列化为字符串。
通过模板批量预置设置
要在一批机器上预配置 XML Notepad,可把定制好的XmlNotepad.template.settings放在XmlNotepad.exe旁边,用户首次启动时会以此模板作为初始默认设置,随后复制到 Roaming 位置。仓库中的示例模板见 XmlNotepad.template.settings,它展示了完整可用的设置文件结构,例如:
<Settings> <AutoFormatLongLines>False</AutoFormatLongLines> <AutoFormatOnSave>True</AutoFormatOnSave> <DisableDefaultXslt>False</DisableDefaultXslt> <EnableXsltScripts>True</EnableXsltScripts> <FontFamily>Courier New</FontFamily> <FontSize>10</FontSize> <IgnoreDTD>False</IgnoreDTD> <IndentChar>Space</IndentChar> <IndentLevel>2</IndentLevel> <MaximumLineLength>10000</MaximumLineLength> <MaximumValueLength>32767</MaximumValueLength> <NewLineChars>\r\n</NewLineChars> <NoByteOrderMark>False</NoByteOrderMark> <Theme>Light</Theme> <UpdateEnabled>True</UpdateEnabled> <UpdateFrequency>20.00:00:00</UpdateFrequency> <UpdateLocation>https://lovettsoftwarestorage.blob.core.windows.net/downloads/XmlNotepad/Updates.xml</UpdateLocation> </Settings>设置文件采用 XML 格式,由 Settings.cs 的Load()反序列化(读取时类型信息来自程序内的默认值,文件本身不存储类型),Save()序列化时按键名排序以保证稳定性;文件被外部修改时,FileSystemWatcher会触发Changed事件并延迟 250ms 合并提示(Settings.cs)。
Updates:ClickOnce 自动更新机制
该分组配置与 ClickOnce 安装器配套的自动更新机制(updates.md),包含三项:
- Enable updates(
UpdateEnabled,默认True):为False时不再轮询更新,且 Help 菜单中的 "Check for updates..." 菜单项会被隐藏; - Update location(
UpdateLocation,默认指向https://lovettsoftwarestorage.blob.core.windows.net/downloads/XmlNotepad/Updates.xml):指定承载Updates.xml信息的端点; - Update frequency(
UpdateFrequency,默认20.00:00:00):以dd.hh:mm:ss格式表示的轮询间隔。注意:该值只能大于Updates.xml中声明的<frequency>(默认每天一次);FormOptions.cs 会校验:格式错误报 "timespan invalid format",小于 30 分钟报 "Update Frequency cannot be less than 30 minutes"。
底层实现Updater(Updater.cs)的要点:
- 启动时先尝试从程序目录下
updates.xml引导(Bootstrap()),获取<application/location>后自动更新UpdateLocation设置; - 轮询条件为"距上次检查(
LastUpdateCheck)超过UpdateFrequency";检查成功后立即写回LastUpdateCheck,避免对服务器造成压力(CheckForUpdate()中_lastCheck = DateTime.Now); - 若
Updates.xml中location变了,会提示 "update page has been moved - check your settings" 并同步选项对话框中的值; - 发现新版本后,主菜单栏右侧会出现按钮,点击打开下载页面(非 ClickOnce 安装时);ClickOnce 安装下更新全自动完成。
仓库自带的更新信息文件见 Updates.xml,其结构如下:
<updates> <application> <title>Microsoft XML Notepad</title> <location>https://lovettsoftwarestorage.blob.core.windows.net/downloads/XmlNotepad/Updates.xml</location> <download>https://lovettsoftwarestorage.blob.core.windows.net/downloads/XmlNotepad/readme.htm</download> <installer>https://microsoft.github.io/XmlNotepad/install/</installer> <history>https://github.com/microsoft/XmlNotepad/blob/master/src/Updates/Updates.xml</history> <frequency>1.00:00:00</frequency> </application> <version number="2.9.0.16"> <bug>Fix issue #430: Autoformat on Save with empty XML-Elements.</bug> <feature>Formatting Options has new setting to format Xml attributes each on a separate line.</feature> </version> ... </updates>各字段含义:title应用标题;location远程更新位置(变化时自动同步到选项设置);installer各版本安装包所在网页;history版本变更历史;frequency轮询频率下限(默认不超过每天一次);每个<version number="...">描述该版本修复的问题与新特性,XML Notepad 会将其与当前程序集版本比较以判断是否有新版。
企业环境中还可通过设置DisableUpdateUI为True隐藏整个更新 UI 与菜单项(updates.md),此时 FormOptions.cs 会把 UpdateLocation、EnableUpdate、UpdateFrequency 三个属性全部隐藏。
Validation:DTD 校验与行号索引上限
Validation分组包含两项:
- Ignore DTD(
IgnoreDTD,默认False):为True时跳过 DTD 校验; - Maximum nodes for validation(
MaximumLineIndex,默认1000000):限制被索引行列位置信息的节点数量上限。该限制存在是因为:为每个节点维护行列索引会占用大量额外内存,且会让超大 XML 文件的编辑变慢(StringResources.resx)。
MaximumLineIndex在 DomLoader.cs 中读取,并在AddToTable()中控制:当已索引的LineInfo数量达到上限后即停止记录(注释明确写道 "stop these tables from eating up too much memory on very large XML documents")。这些行列信息用于将校验错误准确定位到具体行号。另外在 XSLT 转换场景中,IgnoreDTD还会影响 XSLT 加载时的DtdProcessing(AsyncXslt.cs)。
XmlDiff:XML 比较选项
XmlDiff分组控制两个 XML 文档比较(XmlDiff)行为,全部为布尔开关,默认均为False:
| 设置项 | 设置键 | 含义 |
|---|---|---|
| Ignore child order | XmlDiffIgnoreChildOrder | 忽略子元素顺序差异 |
| Ignore comments | XmlDiffIgnoreComments | 忽略注释差异 |
| Ignore processing instructions | XmlDiffIgnorePI | 忽略处理指令差异 |
| Ignore whitespace | XmlDiffIgnoreWhitespace | 忽略元素间无关紧要的空白差异 |
| Ignore namespaces | XmlDiffIgnoreNamespaces | 忽略命名空间差异 |
| Ignore prefixes | XmlDiffIgnorePrefixes | 忽略命名空间前缀差异 |
| Ignore XML declarations | XmlDiffIgnoreXmlDecl | 忽略 XML 声明差异 |
| Ignore DTD | XmlDiffIgnoreDtd | 忽略 DTD 差异 |
| Hide identical | XmlDiffHideIdentical | 在大文档中隐藏相同元素/属性,压缩 HTML 比较结果体积 |
其中XmlDiffHideIdentical在比较逻辑中被实际读取(FormMain.cs),用于生成比较结果时省略相同内容。
XSLT:XSLT 输出选项
XSLT分组控制 XSLT Output 视图的行为(xslt.md),包括:
- Enable Scripts(
EnableXsltScripts,默认True):是否允许执行 XSLT 样式表中的msxsl:script脚本块。若不信任样式表来源的脚本代码,请设为False。该值在 AsyncXslt.cs 中传入XsltSettings(enableDocumentFunction, enableScripts),且settings.EnableScript还会结合信任服务_trustService.CanTrustUrl()二次判断; - Disable default XSLT(
DisableDefaultXslt,默认False):为True时,对没有<?xml-stylesheet处理指令的文档不再套用默认 XSLT(该默认 XSLT 的作用是"把 XML 文档以 HTML 形式着色展示"),而是替换为一条 "Default styling of your XML documents is disabled in your Options" 提示(AsyncXslt.cs); - Web Browser Version(
BrowserVersion,取值WebBrowser/WebView2):选择渲染 XSLT 输出所用的浏览器内核。若机器上安装了 WebView2 组件,可切换以获得更快、更新的 HTML 渲染(参见 xslt.md 中的说明);源码中XsltControl.InitializeBrowser()根据该设置初始化对应内核,未支持 WebView2 时回退 WinFormsWebBrowser(XsltControl.cs)。
注意:Preserve Whitespace选项也会影响 XSLT 输出,因为它改变了文档中空白节点的保留状态,进而影响参与转换的 DOM。
汇总:默认值速查表
以下为 Settings.csSetDefaults()与 XmlNotepad.template.settings 中可验证的选项默认值汇总:
| 选项 | 设置键 | 默认值 |
|---|---|---|
| Allow analytics | AllowAnalytics | False |
| Theme | Theme | Light |
| Font | FontFamily/FontSize | Courier New / 10 |
| TreeView indent | TreeIndent | 12(像素) |
| Auto format on save | AutoFormatOnSave | True |
| Indent level / char | IndentLevel/IndentChar | 2 / Space |
| New line chars | NewLineChars | \r\n |
| Preserve whitespace | PreserveWhitespace | False |
| No BOM on save | NoByteOrderMark | False |
| Attributes on new line | AttributesOnNewLine | False |
| Language | Language | (空) |
| Show schema aware text | SchemaAwareText | True |
| Special names | SchemaAwareNames | id,name,title,key |
| Max line length | MaximumLineLength | 10000 |
| Max value length | MaximumValueLength | 32767 |
| Autoformat long lines | AutoFormatLongLines | False |
| Max nodes for validation | MaximumLineIndex | 1000000 |
| Ignore DTD | IgnoreDTD | False |
| Enable XSLT scripts | EnableXsltScripts | True |
| Disable default XSLT | DisableDefaultXslt | False |
| Web Browser Version | BrowserVersion | WebBrowser |
| Enable updates | UpdateEnabled | True |
| Update frequency | UpdateFrequency | 20.00:00:00 |
| Update location | UpdateLocation | 默认微软更新端点 |
| Prompt before reload | PromptOnReload | True |
| Default text editor | TextEditor | %SystemRoot%\notepad.exe |
实用建议
- 批量部署:使用
XmlNotepad.template.settings模板 +XML_NOTEPAD_DISABLE_ANALYTICS=1环境变量,可在不打扰用户的前提下统一主题、校验与更新策略; - 超大文件性能:若经常编辑 20 MB 以上的 XML,可适当降低
MaximumLineIndex以节省内存、提升编辑速度,同时配合PreserveWhitespace = False减少树中的空白节点; - 长行编辑:文本编辑框的行长度受
MaximumValueLength硬性约束(映射到编辑器的MaximumLineLength),而MaximumLineLength与AutoFormatLongLines控制是否自动折行,二者职责不同、勿混淆; - XSLT 安全:在打开不可信来源的 XSLT 文件时,务必将
Enable Scripts设为False。
相关文档:menus.md(入口)、settings.md(存储位置)、updates.md(更新机制)、analytics.md(匿名统计)、xslt.md(XSLT 输出)。
- 桌面应用
- 开发工具
【免费下载链接】XmlNotepad
XML Notepad provides a simple intuitive User Interface for browsing and editing XML documents.
相关推荐
Redux DevTools Extension 配置选项(Options)全解析:从 API 参数到源码实现
Redux DevTools Extension 配置选项(Options)全解析:从 API 参数到源码实现 本篇技术指南以 docs/API/Argumen
前端开发工具调试器Sass JavaScript API Options 全面解析:从编译配置到源码级行为规范
Sass JavaScript API Options 全面解析:从编译配置到源码级行为规范 Sass 的 JavaScript API 是官方统一规范,通过一
前端XML Notepad:专业级XML编辑工具全面解析
XML Notepad:专业级XML编辑工具全面解析 XML Notepad是一款专为XML文档浏览和编辑设计的Windows应用程序,通过直观的用户界面和强大
桌面应用开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考