xml - 使用正则表达式检索 XML 命名空间

标签 xml regex

给定一个我想用 XPath 解析的 XML 片段,我首先需要提取 namespace 以添加到 namespace 管理器中。我一直在尝试找出提取定义命名空间的 xml 属性所需的正则表达式模式。例如,我想获取所有 namespace ,我可以对其进行一些更基本的字符串操作,以分离 namespace 名称和 url。

xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-02-12T12:41:45"

属性名称将始终以 xmlns: 开头,我需要正则表达式读取到值的末尾,因此包括最后一个 "

或者,更通用的模式可以完成提取 name="value"形式的所有属性的工作,我可以做一些字符串比较以查看每个属性是否是一个命名空间。

<my:StationLookupValues xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-02-12T12:41:45"><my:StationLookupValue>Hull Inspectors</my:StationLookupValue></my:StationLookupValues><my:StationLookupValues xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-02-12T12:41:45"><my:StationLookupValue>Barnsley Inspectors</my:StationLookupValue></my:StationLookupValues><my:StationValue xmlns:my="http://schemas.microsoft.com/office/infopath/2003/myXSD/2010-02-12T12:41:45">Hull Inspectors</my:StationValue>

我一直找不到这样的例子,也没有自己解决。非常感谢这方面的任何帮助。

[编辑] 我知道应该使用 XML 解析器,这就是我要做的。但我只有一个要传递的 XML 片段,所以我必须首先构建一个 namespace 管理器,为此我需要提取所使用的 namespace 。

最佳答案

试试这个模式:'xmlns:(.*?)=(".*?")'

意思是

  • 文字字符串 xmlns:
  • 到=的最短字符串
  • 一个引号,后跟最短的字符串,直到下一个引号

括号表示第一组包含命名空间名称,第二组是值。根据您是否想要将所有内容合而为一,以及是否想要组中的报价进行调整。

正如 Tomalak 在他的回答中指出的那样,这充满了危险。它可能会匹配作为注释的一部分或作为数据嵌入字符串中的模式等。这就是为什么正则表达式不适用于解析 xml 数据的原因——因为您实际上不是解析,您'只是寻找模式而不考虑上下文)。

关于xml - 使用正则表达式检索 XML 命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2296275/

相关文章:

javascript - 在for循环中多次执行window.location.replace

xml - 如何使用 XPath 选择以下兄弟/XML 标记

mysql - 如何在MySQL中使用正则表达式用随机数更新和替换字符串?

java - IntelliJ 中的正则表达式反向引用

java - reSTLet 引擎中带有长字符串的 Pattern.match 的 StackoverflowError

在 Visual Studio IDE 中使用 XSD 进行 XML 验证

android - 将布局定位到井字游戏应用程序时出现问题 - 从屏幕上掉下来

regex - 跳过多个号码

c# - 正则表达式从字符串xx :xx:xx format中提取

java - 使用 JDOM 解析 XML 文件时出错