65.9K
CodeProject 正在变化。 阅读更多。
Home

另一个 XPathTester

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.12/5 (6投票s)

2007 年 11 月 20 日

CPOL

2分钟阅读

viewsIcon

24208

downloadIcon

204

...尝试设计得更符合人体工程学

特点

  • 显示 Xml 文件,并为已测试的 XPath 查询的所有匹配节点着色。
  • 从 Xml 文件中提取命名空间
  • 保存/恢复任何已测试的 XPath 查询的所有必需信息
    - Xml 文件,- 包含的 Xml 命名空间,- XPath 表达式,- 表达式引用的 Xml 命名空间。
  • 您可以为每个已测试的 XPath 查询添加注释。
  • 一些简单的例子

Notice

XPath 语言旨在指定来自任何任意 XmlElement 的查询。 此 XPath 测试器仅支持来自文档节点本身的查询。

Screenshot - XPathTester.Png

使用程序

  1. 首先选择一个您要检查的 Xml 文件。
    (单击选择器网格中的空白行将打开一个 FileOpenDialog。)
  2. 然后编写一个 XPath 表达式。
  3. 如果表达式需要使用命名空间,您可以从“选择命名空间”网格中选择它们。
  4. 注意:某些命名空间(例如,默认命名空间)在 XmlFile 中没有定义前缀。 要解决这个问题,您需要自己定义将在 XPath 查询中使用的前缀(将其键入“XPathPrefix”列中)。
  5. 现在您可以单击“标记查询结果”,我希望它能成功。
  6. 无效的查询会发出哔哔声,并将所有内容标记为红色。 然后注意状态栏,它会显示错误消息。
  7. 通过菜单“数据库 – 保存”备份您成功的或有趣的查询。

程序的使用

指定节点的着色很好地显示了 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 

优秀的教程

关于 Xml 和其他内容

请原谅

该程序可以被认为是快速开发的结果,是简陋的软件的例子。
“Helpers”文件夹包含我在多个项目中经常使用的一堆类。
因此,其中一些类比(这里)需要的更强大和复杂,另一些类看起来像是小问题的大解决方案,还有一些类看起来像 ? 或 ??。
此外,Helper-Stuff 用德语注释。

一个请求

通常我的评分很差,我不知道原因。
恕我直言,1 分适用于无法编译的解决方案或其他情况。
请给我发邮件或发表帖子,让我明白我做了什么代码恐怖的事情。

谢谢

历史

12/7/07:自动建议“def”作为默认命名空间的 XPath 前缀


© . All rights reserved.