首页 > 解决方案 > 使用 PHP 的 XML 中的正则表达式:查找某个 xml 标记的某个值

问题描述

我正在尝试使用正则表达式获取某个 xml 标记中某个属性的值,但无法正确获取,也许有人知道该怎么做?

xml 看起来像这样:

<OTA_PingRQ>
  <Errors>
    <Error Code="101" Type="4" Status="NotProcessed" ShortText="Authentication refused">Authentication : login failed</Error>
  </Errors>
</OTA_PingRQ>

并且 id 喜欢只匹配 Error 标签内的 Shorttext 的值。最后它应该还给我"Authentication refused"

到目前为止,我尝试的是使用后向和前瞻,这不允许我采用非固定宽度的量词。像那样(?<=<Error .).*?(?=>)。有人能告诉我如何只匹配短文本的值(在错误标签内)吗?

标签: regexxml

解决方案


你没有指定你使用的语言,我可以用 PHP 给你解决方案,反正每种语言的正则表达式都是一样的。

这是您正在寻找的正则表达式:

#\<Error Code\=\"[0-9]+\" Type\=\"[0-9]+\" Status\=\"NotProcessed\" ShortText\=\"([a-z 0-9]+)\"\>#is

具体的PHP使用:

$yourOriginalString = '
<OTA_PingRQ>
  <Errors>
    <Error Code="101" Type="4" Status="NotProcessed" ShortText="Authentication refused">Authentication : login failed</Error>
  </Errors>
</OTA_PingRQ>' ;

preg_match_all('#\<Error Code\=\"[0-9]+\" Type\=\"[0-9]+\" Status\=\"NotProcessed\" ShortText\=\"([a-z 0-9]+)\"\>#im', $yourOriginalString, $result) ;
print_r($result) ;

正则表达式函数将返回一个数组:

   [0] => Array
        (
            [0] => <Error Code="101" Type="4" Status="NotProcessed" ShortText="Authentication refused">
        )

    [1] => Array
        (
            [0] => Authentication refused
        )

[0] 是完全匹配 [1] 列出匹配捕获组中的内容:每个 () 在您的正则表达式中设置

一些正则表达式解释:

Type\=\"[0-9]+\"

假设“类型”可以改变并且是任何数字。

 ShortText\=\"([a-z 0-9]+)\"

捕获字符串字母数字 + 空格字符串。如果你需要一些其他的东西,你可以像这样更新:

*[a-z 0-9\!\-]+*

抓住 !和 - 太

#is

是标志和忽略 = 大写和换行符


推荐阅读