如何使用正则表达式从XML中提取标签名称

时间:2019-09-30 21:56:27

标签: java regex

我要解决一个问题。我有2种格式的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>

在两种情况下,我都希望提取标记名,该标记名是<Request>之后的第一个。即OneRequestSecondRequest(它们是动态的,一共有100个)。我尝试使用正则表达式,但没有得到我想要的。任何意见或建议将不胜感激。

也确实看到了有关xml解析器的帖子,但是对于我基本上想要的只是<Request>之后的第一个标签似乎有点矫kill过正。

我的尝试

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

在第一个类型上效果不是最好,但在第二个类型上完全搞砸了

1 个答案:

答案 0 :(得分:0)

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

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

<Request .*?>\s*<(?<tagname>.*?)>

see regex101 working example