Visual Basic 8 (2005)Visual Studio 2005Windows XPWindows FormsIntermediateDevVisual StudioWindows.NETVisual Basic
另一个 XPathTester






2.12/5 (6投票s)
...尝试设计得更符合人体工程学
特点
- 显示 Xml 文件,并为已测试的 XPath 查询的所有匹配节点着色。
- 从 Xml 文件中提取命名空间
- 保存/恢复任何已测试的 XPath 查询的所有必需信息
- Xml 文件,- 包含的 Xml 命名空间,- XPath 表达式,- 表达式引用的 Xml 命名空间。 - 您可以为每个已测试的 XPath 查询添加注释。
- 一些简单的例子
Notice
XPath 语言旨在指定来自任何任意 XmlElement 的查询。 此 XPath 测试器仅支持来自文档节点本身的查询。
使用程序
- 首先选择一个您要检查的 Xml 文件。
(单击选择器网格中的空白行将打开一个 FileOpenDialog。) - 然后编写一个 XPath 表达式。
- 如果表达式需要使用命名空间,您可以从“选择命名空间”网格中选择它们。
- 注意:某些命名空间(例如,默认命名空间)在 XmlFile 中没有定义前缀。 要解决这个问题,您需要自己定义将在 XPath 查询中使用的前缀(将其键入“XPathPrefix”列中)。
- 现在您可以单击“标记查询结果”,我希望它能成功。
- 无效的查询会发出哔哔声,并将所有内容标记为红色。 然后注意状态栏,它会显示错误消息。
- 通过菜单“数据库 – 保存”备份您成功的或有趣的查询。
程序的使用
指定节点的着色很好地显示了 XPath 查询的结果。 这有助于您开发合适的查询,但也可用于理解一些复杂的 Xml 文件(如 Dataset.xsd 之类的)的功能。
例如,屏幕截图显示了 XPath "//def:Compile/@Include"
的查询结果,该查询从项目文件 (*.vbproj) 中查询所有要编译的文件。
执行该查询的完整子程序可能如下所示
Private Sub DisplayCompiledFiles(ByVal Path As String)
Dim XDoc As New XmlDocument
XDoc.Load(Path) '"Path": selected from XmlFile-grid
Dim NSMngr As New XmlNamespaceManager(XDoc.NameTable)
'"def": in "known Namespaces" userdefined Namespace-prefix
'"http://..." : Namespace auto-extracted from the XmlFile
NSMngr.AddNamespace( _
"def", "http://schemas.microsoft.com/developer/msbuild/2003")
With New StringBuilder
'"//def:Compile/@Include": tested XPath-expression
For Each XAttr As XmlAttribute In XDoc.SelectNodes( _
"//def:Compile/@Include", NSMngr)
.Append(XAttr.Value).Append(ControlChars.Lf)
Next
MsgBox(.ToString)
End With
End Sub
(注意:可以使用 XPathDocument,XPathNavigator 等进行优化。)
另一个感兴趣的点是 ForEach 迭代器的数据类型。
它是 XmlAttribute。
因为查询 "//def:Compile/@Include"
返回一个仅包含 XmlAttributes 的 XmlNodelist。
查询 "//def:Compile"
将返回 XmlElements。 所以循环应该是这样的
For Each Xel As XmlElement In XDoc.SelectNodes( _
"//def:Compile", NSMngr)
.Append(Xel.GetAttribute("Include")).Append(ControlChars.Lf)
Next
优秀的教程
请原谅
该程序可以被认为是快速开发的结果,是简陋的软件的例子。
“Helpers”文件夹包含我在多个项目中经常使用的一堆类。
因此,其中一些类比(这里)需要的更强大和复杂,另一些类看起来像是小问题的大解决方案,还有一些类看起来像 ? 或 ??。
此外,Helper-Stuff 用德语注释。
一个请求
通常我的评分很差,我不知道原因。
恕我直言,1 分适用于无法编译的解决方案或其他情况。
请给我发邮件或发表帖子,让我明白我做了什么代码恐怖的事情。
谢谢
历史
12/7/07:自动建议“def”作为默认命名空间的 XPath 前缀