2

一个应用程序正在向我的脚本发送一个像这样的流:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <aRootChildNode>
    <anotherChildNode>
     <?xml version="1.0">
     <TheNodeImLookingFor>
       ... content ...
     </TheNodeImLookingFor>
    </anotherChildNode>
   </aRootChildNode>
</root>

我想提取该TheNodeImLookingFor部分。到目前为止,得到:

data = string.match(Stream, "^.+\<TheNodeImLookingFor\>.+\<\/TheNodeImLookingFor\>.+$")

模式在流中被识别,但它不提取节点及其内容。

4

1 回答 1

3

一般来说,使用模式匹配(Lua 模式或正则表达式)来提取 XML 并不是一个好主意。使用 XML 解析器。

对于这个问题,您不需要转义\<(即使您这样做,Lua 模式也会使用%转义魔术字符)。并使用方括号获取节点及其内容:

data = string.match(Stream, "^.+(<TheNodeImLookingFor>.+</TheNodeImLookingFor>).+$")

或仅获取内容:

data = string.match(Stream, "^.+<TheNodeImLookingFor>(.+)</TheNodeImLookingFor>.+$")
于 2014-05-09T07:37:25.027 回答