在nodejs中解析http响应

rqmkfv5c  于 2023-01-30  发布在  Node.js
关注(0)|答案(1)|浏览(125)

我尝试对以下内容进行简单解析以捕获NewCaseId,但在使用DOMParser和xpath时没有成功。
我创建了一个lambda函数,它可以命中端点并成功返回原始响应,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://<companyname>/<PlatformServices>/GeneralRequest">&lt;?xml version="1.0" encoding="utf-16"?&gt;
&lt;Response&gt;
  &lt;Case Status="Success" Id="75ba8279-579b-42b6-9c1f-1184f1e076ae" NewCaseId="13825964-8931-4eb5-b60b-f519dbe3ea9c"&gt;
    &lt;InsuranceCaseID&gt;LAMBDA TEST&lt;/InsuranceCaseID&gt;
  &lt;/Case&gt;
&lt;/Response&gt;</string>

在我的lambda函数中有以下代码片段(代码片段已经简化):

const textValue = await response.text();
  
  const doc = new DOMParser().parseFromString(textValue);
  console.log(`doc : ` + doc);

  const select = useNamespaces({ vpc: 'http://<companyname>/PlatformServices/GeneralRequest' });

  const xml = select('//vpc:string/text()', doc)[0].nodeValue;      
  const doc2 = new DOMParser().parseFromString(xml, 'text/xml');
  
  console.log(`doc2 : ` + doc2);

  const xml2 = select('/Response/Case', doc2);
  console.log(`xml2 : ` + xml2);

这将xml分解为

<Case Status="Success" Id="75ba8279-579b-42b6-9c1f-1184f1e076ae" NewCaseId="13825964-8931-4eb5-b60b-f519dbe3ea9c">
    <InsuranceCaseID>LAMBDA TEST #2</InsuranceCaseID>
  </Case>

但问题是如何提取NewCaseId。有人有什么想法吗?(而且,分解NewCaseId看起来相当复杂,所以任何想法都会很有帮助。即使使用其他包,如xml 2 js或xml-js)
提取是通过节点提取完成的'
我是nodej和Lambda的新手,所以我还在学习。

7gcisfzg

7gcisfzg1#

xml变量的内容是否可能包含html实体(&lt;&gt;)而不是文字字符(<>)?如果是这样,那么parseFromString(xml...)将不会按照您希望的方式工作。

相关问题