【问题标题】:How can I extract tag name from XML using regex如何使用正则表达式从 XML 中提取标签名称
【发布时间】:2019-09-30 21:56:27
【问题描述】:

我有一个问题正在尝试解决。我有两种格式的 xml 请求

<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns="urn:x-facebook-com:DEF.plan.services.test">
  <OneRequest>
    <page_number>1</page_number>
    <page_size>25</page_size>
    <origin>TEST</origin>
    <item_name/>
  </OneRequest>
</Request>

<?xml version="1.0" encoding="UTF-8"?>
<Request xmlns="urn:x-google-com:ABC.plan.services.plans">
 <SecondRequest/>
</Request>

在这两种情况下,我都想提取 &lt;Request&gt; 之后的第一个标签名称。即 OneRequestSecondRequest (这些将是动态的,并且有 100 个)。我尝试使用正则表达式,但没有得到我想要的。任何意见或建议将不胜感激。

也确实看到了有关 xml 解析器的帖子,但我基本上想要的只是&lt;Request&gt; 之后的第一个标签,这似乎有点过头了

我的尝试

String[] requestTags = requestBody.split("</");
String requestName = requestTags[requestTags.length-2].replaceAll("[^a-zA-Z0-9]",

在第一种情况下不是最好的,但在第二种情况下完全搞砸了

【问题讨论】:

  • 欣赏反对票,但除非我知道你为什么反对票,否则我无法真正解决它
  • 请分享您的尝试
  • 也确实看到了有关 xml 解析器的帖子,但这似乎有点过头了 - 我不同意(但没有投反对票)。正则表达式只是不适合这项工作的工具。我会解析它并使用一个简单的 XPath:name(/*/*)See here 是 XPath 1.0 和 2.0 的示例。)
  • @DanielHaley 我可以尝试 xml 解析器,但有两件事 1)我想要的是请求之后的顶级标签 2)请求非常大,这可能会开始影响性能,它可能不会在雷达下飞行.但我还是会尝试一下,看看它是如何工作的

标签: java regex


【解决方案1】:

您基本上只需要正则表达式中的\s 选项即可实现此目的:

使用此正则表达式,并从 tagname 组中获取值:

&lt;Request .*?&gt;\s*&lt;(?&lt;tagname&gt;.*?)&gt;

see regex101 working example

【讨论】:

  • 请求以字符串形式出现。为了便于阅读,我在这里添加了新行,为混淆道歉
  • 哦,我更新了链接。它不好看,但可以完成工作:)
  • 甜会看看。只是一个简单的问题,我们可以在 java 中做标记名吗?我是 java 中正则表达式的新手,不确定我以前是否见过这样使用它。
  • 可以,见here
  • 我也看到你依赖 xmlns 。我已经更新了问题,但它们不会相同。会有一个 xmlns,但它可能因每个请求而异。为混淆向@Niklas 道歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
相关资源
最近更新 更多