Coldfusion - 需要在开始和结束标签之间获取字符串数据

Coldfusion - Need to get string data between opening and closing tags

我正在尝试获取两个字符串之间的特定数据,这两个字符串是开始标记和结束标记。通常我会使用 XmlParse 解析它,但问题是它在数据集中有很多其他垃圾。

这里是一个大字符串的例子:

test of data need to parse:<?xml version="1.0" encoding="UTF-8"?><alert xmlns="urn:oasis:names:tc::cap:1.2"><identifier>_2020-12-16T17:32:5620201116173256</identifier><sender>683</sender><sent>2020-12-16T17:32:56-05:00</sent><status>Test</status><msgType>Alert</msgType><source>test of data need to parse</source><scope>Public</scope><addresses/><code>Test1.0</code><note>WENS IPAWS</note><info><language>en-US</language></info>


<capsig:Signature xmlns:capsig="http://www.w3.org/2000/09/xmldsig">

<capsig:Info>
<capsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n"/>
<capsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-morersa-sha256"/>
<capsig:Referrer URI="">
<capsig:Trans>
<capsig:Trans Algorithm="http://www.w3.org/2000/09/xmldsigenveloped-signature"/>
</capsig:Trans>
<capsig:DMethod Algorithm="http://www.w3.org/2001/04/xmlencsha256"/>
<capsig:DigestValue>wjL4tqltJY7m/4=</capsig:DigestValue>
</capsig:Referrer>
</capsig:Info>


test of data need to parse:<?xml version="1.0" encoding="UTF-8"?><alert xmlns="urn:oasis:names:tc::cap:1.2"><identifier>_2020-12-16T17:32:5620201116173256</identifier><sender>683</sender><sent>2020-12-16T17:32:56-05:00</sent><status>Test</status><msgType>Alert</msgType><source>test of data need to parse</source><scope>Public</scope><addresses/><code>Test1.0</code><note>WENS IPAWS</note><info><language>en-US</language></info>

所以我需要做的就是提取以下内容:

 <capsig:Info>
 <capsig:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n"/>
 <capsig:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-morersa-sha256"/>
 <capsig:Referrer URL="">
 <capsig:Trans>
 <capsig:Trans Algorithm="http://www.w3.org/2000/09/xmldsigenveloped-signature"/>
 </capsig:Trans>
 <capsig:DMethod Algorithm="http://www.w3.org/2001/04/xmlencsha256"/>
 <capsig:DigestValue>wjL4tqltJY7m/4=</capsig:DigestValue>
 </capsig:Referrer>
 </capsig:Info>

我到处搜索,找到了可以用字符和计数来完成的事情,但 none 确实有效。尝试使用 SQL 进行操作,但由于字符串的不断变化会导致问题。所以我的计划是获取“capsig:Info”之后和“”之前的所有内容,然后将其插入 table.

有没有办法用 Coldfusion 做到这一点?

如有任何建议,我们将不胜感激。

谢谢!

是的,您可以使用正则表达式匹配来提取包含 <capsig:Info> ... </capsig:Info> 标签之间文本的子字符串,方法是使用 ColdFusion 函数 reMatch(),它将 return 一个包含所有元素的数组匹配指定模式的子字符串。这可以使用下面的代码行来完成。

<!--- Use reMatch to extract all pattern matches into an array --->
<cfset parsedXml = reMatch("<capsig:Info>(.*?)</capsig:Info>", xmlToParse)>

<!--- parsedXml is an array of strings.  The result will be found in the first array element as such --->
<cfdump var="#parsedXml[1]#" label="parsedXml">

您可以使用此处的演示看到这一点。

https://trycf.com/gist/00be732d93ef49b2427768e18e371527/lucee5?theme=monokai