1

Coldfusion 9 を使用して SOAP Web サービスを作成し、販売パートナーが注文を e コマース プラットフォームに直接投稿できるようにしています。インバウンド SOAP メッセージには、次のようなノードが含まれています。

...
<LineItem xsi:type="ws1:Item">
   <LineNumber xsi:type="xsd:double">1</LineNumber>
    <PartNumber xsi:type="xsd:string">Widget-01</PartNumber>
    <Price xsi:type="xsd:double">100</Price>
    <Quantity xsi:type="xsd:double">4</Quantity>
    <SubscriberEmail xsi:type="xsd:string">nitwit@gmail.com</SubscriberEmail>
    <UnitofMeasure xsi:type="xsd:string">EA</UnitofMeasure>
</LineItem>
...

次の Coldfusion コードを含むインバウンド リクエストを受信して​​います。

<cfset theXML = getsoaprequest() />

<cfset arrNodes = XmlSearch(theXML, "//LineItem") />

<cfset rtn = arrNodes[1].PartNumber.XmlText/>

しかし、3 行目で次のエラーがスローされます。

3 行目を次のように変更すると、arrNodes[1].XmlChildren結果は返されません。子ノードが存在しないように見えarrNodes[1]ますが、完全に設定されたノードが返されます。

私は何が欠けていますか?

編集: SoapBody 全体は次のとおりです。

   <soapenv:Body>
  <ws1:createOrder soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
     <Order xsi:type="ws1:Order">
        <BillToAddress xsi:type="ws1:Address">
           <AddrLine1 xsi:type="xsd:string">10101 Main Street</AddrLine1>
           <AddrLine2 xsi:type="xsd:string">Science Lab</AddrLine2>
           <AddrLine3 xsi:type="xsd:string"></AddrLine3>
           <Attention xsi:type="xsd:string">John Doe</Attention>
           <AttnPhone xsi:type="xsd:string">877-555-0131</AttnPhone>
           <City xsi:type="xsd:string">Roseville</City>
           <CompanyName xsi:type="xsd:string">Washington High School</CompanyName>
           <Country xsi:type="xsd:string">USA</Country>
           <PostalCode xsi:type="xsd:string">95747</PostalCode>
           <StateProvince xsi:type="xsd:string">CA</StateProvince>
        </BillToAddress>
        <CustPO xsi:type="xsd:string">asdfasdf13241234</CustPO>
        <OrderDate xsi:type="xsd:dateTime">2002-05-30T09:00:00</OrderDate>
        <OrderDetail xsi:type="ws1:Orderdetail">
           <LineItem xsi:type="ws1:Item">
              <LineNumber xsi:type="xsd:double">1</LineNumber>
              <PartNumber xsi:type="xsd:string">Widget01</PartNumber>
              <Price xsi:type="xsd:double">100</Price>
              <Quantity xsi:type="xsd:double">4</Quantity>
              <SubscriberEmail xsi:type="xsd:string">nitwit@gmail.com</SubscriberEmail>
              <UnitofMeasure xsi:type="xsd:string">EA</UnitofMeasure>
           </LineItem>
           <LineItem xsi:type="ws1:Item">
              <LineNumber xsi:type="xsd:double">2</LineNumber>
              <PartNumber xsi:type="xsd:string">>Widget02</PartNumber>
              <Price xsi:type="xsd:double">100</Price>
              <Quantity xsi:type="xsd:double">6</Quantity>
              <SubscriberEmail xsi:type="xsd:string">nitwit@gmail.com</SubscriberEmail>
              <UnitofMeasure xsi:type="xsd:string">EA</UnitofMeasure>
           </LineItem>
        </OrderDetail>
        <PurchAgent xsi:type="xsd:string">Mary</PurchAgent>
        <PurchAgentEmail xsi:type="xsd:string">mary@gmail.com</PurchAgentEmail>
        <PurchAgentPhone xsi:type="xsd:string">877-555-0131</PurchAgentPhone>
        <ShipToAddress xsi:type="ws1:Address">
           <AddrLine1 xsi:type="xsd:string">10101 Main Street</AddrLine1>
           <AddrLine2 xsi:type="xsd:string">Science Lab</AddrLine2>
           <AddrLine3 xsi:type="xsd:string"></AddrLine3>
           <Attention xsi:type="xsd:string">John Doe</Attention>
           <AttnPhone xsi:type="xsd:string">877-555-0131</AttnPhone>
           <City xsi:type="xsd:string">Roseville</City>
           <CompanyName xsi:type="xsd:string">Washington High School</CompanyName>
           <Country xsi:type="xsd:string">USA</Country>
           <PostalCode xsi:type="xsd:string">95747</PostalCode>
           <StateProvince xsi:type="xsd:string">CA</StateProvince>
        </ShipToAddress>
        <SoldToAddress xsi:type="ws1:Address">
           <AddrLine1 xsi:type="xsd:string">10101 Main Street</AddrLine1>
           <AddrLine2 xsi:type="xsd:string">Science Lab</AddrLine2>
           <AddrLine3 xsi:type="xsd:string"></AddrLine3>
           <Attention xsi:type="xsd:string">John Doe</Attention>
           <AttnPhone xsi:type="xsd:string">877-555-0131</AttnPhone>
           <City xsi:type="xsd:string">Roseville</City>
           <CompanyName xsi:type="xsd:string">Washington High School</CompanyName>
           <Country xsi:type="xsd:string">USA</Country>
           <PostalCode xsi:type="xsd:string">95747</PostalCode>
           <StateProvince xsi:type="xsd:string">CA</StateProvince>
        </SoldToAddress>
     </Order>
  </ws1:createOrder>

編集:これを機能させるために(スコットの提案で)追加したコードは次のとおりです。

<cfset strXML = ToString(docXML) />     
    <cfset strXml = REReplace( strXml, "^[^<]*", "", "all" ) />         
    <cfset docXML = XMLParse(strXML) />
4

0 に答える 0