karate.set-输出不包含所有xml节点

时间:2018-12-11 21:05:51

标签: karate

我必须解析 pricePlanSummary 元素(不包括 includedService 子节点)。我尝试了建议的karate.set方法。但是我的输出仅包含一个xml元素。

我的代码

* def included = $Test1/Envelope/Body/getPricePlanResponse/pricePlanSummary/*[not(self::includedService)]
* def root = <root></root>
* def fun = function(x, i){ karate.set('root', '/pricePlanSummary[' + (i + 1) + ']', x) }
* eval karate.forEach(included, fun)
* print root

如果我在XML以下运行此命令,则响应中将得到<root>0</root>。看来我需要首先解析几个[#document:null]元素,然后解析整个输出。我不知道该怎么做。这与我问的最后一个问题非常相似。但是我又被困在这里。

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  <S:Header/>
  <S:Body>
    <ns10:getPricePlanResponse>
    <ns4:dataSharingGroupCode>CAD_DATA</ns4:dataSharingGroupCode>
      <ns10:pricePlanSummary>
        <ns5:descriptionFrench>Forfait Montre Affaires</ns5:descriptionFrench>
        <ns4:category/>
        <ns4:effectiveDate>2009-11-05</ns4:effectiveDate>
        <ns4:serviceDataSharingGroupList>
          <ns4:dataSharingGroupCode>CAD_DATA</ns4:dataSharingGroupCode>
          <ns4:contributingInd>true</ns4:contributingInd>
        </ns4:serviceDataSharingGroupList>
        <ns4:feature>
          <ns5:descriptionFrench>Service</ns5:descriptionFrench>
          <ns4:poolGroupId/>
        </ns4:feature>
        <ns4:recurringCharge>10.0</ns4:recurringCharge>
        <ns4:ppsStorageSize>0</ns4:ppsStorageSize>
        <ns4:includedService>
          <ns4:term>0</ns4:term>
          <ns4:brandId>1</ns4:brandId>
          <ns4:feature>
            <ns5:code>MBAPN</ns5:code>
            <ns4:type/>
            <ns4:additionalNumberRequiredInd>false</ns4:additionalNumberRequiredInd>
          </ns4:feature>
          <ns4:recurringCharge>0.0</ns4:recurringCharge>
          <ns4:callingCircleFeaturesInd>false</ns4:callingCircleFeaturesInd>
        </ns4:includedService>
        <ns4:includedService>
          <ns4:term>0</ns4:term>
          <ns4:brandId>1</ns4:brandId>
          <ns4:feature>
            <ns5:code>MBAPN</ns5:code>
            <ns4:type/>
            <ns4:additionalNumberRequiredInd>false</ns4:additionalNumberRequiredInd>
          </ns4:feature>
          <ns4:recurringCharge>0.0</ns4:recurringCharge>
          <ns4:callingCircleFeaturesInd>false</ns4:callingCircleFeaturesInd>
        </ns4:includedService>
        <ns4:availableTermInMonths>0</ns4:availableTermInMonths>
      </ns10:pricePlanSummary>
    </ns10:getPricePlanResponse>
  </S:Body>
</S:Envelope>

1 个答案:

答案 0 :(得分:1)

删除所有^(?!https?:|[[\]]).*\\\\ 元素比较容易。

includedService

我个人认为您似乎在做不必要的事情。您是使用空手道来处理XML还是仅验证预期结果?请认真考虑这个问题。您通常不需要使用空手道来创建XML。对于断言,只需检查XML是否包含一些元素就可以了。