Как демаршироватьFDE </CarrierIdentifier> этот тип XML получает значение домена - PullRequest
0 голосов
/ 07 июня 2019

Я новичок в XML, чтобы разобраться в нем, нужна помощь и руководство, как я могу разобрать XML ниже, используя JAXB и groovy.Мне нужно создать классы, но я не уверен, как можно читать значения AKJ Books в этой части поля xml: lang.

Заранее спасибо за помощь.

<cXML payloadID="20190205180826780.ShipNotice@Ariba.AKJBooks.com" xml:lang="en-US" timestamp="2019-02-05T18:08:25-05:00">
  <Header>
    <From>
      <Credential domain="NetworkId">
        <Identity>AN01001332601</Identity>
      </Credential>
    </From>
    <To>
      <Credential domain="NetworkId">
        <Identity>AN01001160200</Identity>
      </Credential>
    </To>
    <Sender>
      <Credential domain="NetworkId">
        <Identity>AN01001332601</Identity>
        <SharedSecret>XXXXXX</SharedSecret>
      </Credential>
      <UserAgent>AKJBooks Ariba Interface</UserAgent>
    </Sender>
  </Header>
  <Request deploymentMode="production">
    <ShipNoticeRequest>
      <ShipNoticeHeader shipmentID="A1464251-426A-4825-80F5-1C85FB530904" noticeDate="2019-02-05T18:06:22-05:00" shipmentDate="2019-02-04T00:00:00-05:00" deliveryDate="2019-02-11T00:00:00-05:00">
        <Contact role="shipFrom">
          <Name xml:lang="en-US">AKJ Books</Name>
          <PostalAddress>
            <Street>4702 Benson Avenue</Street>
            <City>Halethorpe</City>
            <State>MD</State>
            <PostalCode>21227</PostalCode>
            <Country isoCountryCode="US">USA</Country>
          </PostalAddress>
          <Phone>
            <TelephoneNumber>
              <CountryCode isoCountryCode="US">1</CountryCode>
              <AreaOrCityCode>410</AreaOrCityCode>
              <Number>2421602</Number>
            </TelephoneNumber>
          </Phone>
        </Contact>
        <Comments xml:lang="en-US" />
      </ShipNoticeHeader>
      <ShipControl>
        <CarrierIdentifier domain="SCAC">FDE</CarrierIdentifier>
        <CarrierIdentifier domain="companyName">Federal Express</CarrierIdentifier>
        <ShipmentIdentifier>476352763792</ShipmentIdentifier>
      </ShipControl>
      <ShipNoticePortion>
        <OrderReference orderID="J024157938793101">
          <DocumentReference payloadID="1548443458012.1408509556.OrderRequest@DonorsChoose.org" />
        </OrderReference>
        <ShipNoticeItem quantity="6" lineNumber="1">
          <UnitOfMeasure>EA</UnitOfMeasure>
        </ShipNoticeItem>
        <ShipNoticeItem quantity="6" lineNumber="2">
          <UnitOfMeasure>EA</UnitOfMeasure>
      </ShipNoticePortion>
    </ShipNoticeRequest>
  </Request>
</cXML>

1 Ответ

0 голосов
/ 07 июня 2019

Во-первых, ваш XML неверен.Недостающее закрытие </ShipNoticeItem> к концу.Однако, как только вы это исправите:

import groovy.util.XmlSlurper

def xml = '''<cXML payloadID="20190205180826780.ShipNotice@Ariba.AKJBooks.com" xml:lang="en-US" timestamp="2019-02-05T18:08:25-05:00">
  <Header>
    <From>
      <Credential domain="NetworkId">
        <Identity>AN01001332601</Identity>
      </Credential>
    </From>
    <To>
      <Credential domain="NetworkId">
        <Identity>AN01001160200</Identity>
      </Credential>
    </To>
    <Sender>
      <Credential domain="NetworkId">
        <Identity>AN01001332601</Identity>
        <SharedSecret>XXXXXX</SharedSecret>
      </Credential>
      <UserAgent>AKJBooks Ariba Interface</UserAgent>
    </Sender>
  </Header>
  <Request deploymentMode="production">
    <ShipNoticeRequest>
      <ShipNoticeHeader shipmentID="A1464251-426A-4825-80F5-1C85FB530904" noticeDate="2019-02-05T18:06:22-05:00" shipmentDate="2019-02-04T00:00:00-05:00" deliveryDate="2019-02-11T00:00:00-05:00">
        <Contact role="shipFrom">
          <Name xml:lang="en-US">AKJ Books</Name>
          <PostalAddress>
            <Street>4702 Benson Avenue</Street>
            <City>Halethorpe</City>
            <State>MD</State>
            <PostalCode>21227</PostalCode>
            <Country isoCountryCode="US">USA</Country>
          </PostalAddress>
          <Phone>
            <TelephoneNumber>
              <CountryCode isoCountryCode="US">1</CountryCode>
              <AreaOrCityCode>410</AreaOrCityCode>
              <Number>2421602</Number>
            </TelephoneNumber>
          </Phone>
        </Contact>
        <Comments xml:lang="en-US" />
      </ShipNoticeHeader>
      <ShipControl>
        <CarrierIdentifier domain="SCAC">FDE</CarrierIdentifier>
        <CarrierIdentifier domain="companyName">Federal Express</CarrierIdentifier>
        <ShipmentIdentifier>476352763792</ShipmentIdentifier>
      </ShipControl>
      <ShipNoticePortion>
        <OrderReference orderID="J024157938793101">
          <DocumentReference payloadID="1548443458012.1408509556.OrderRequest@DonorsChoose.org" />
        </OrderReference>
        <ShipNoticeItem quantity="6" lineNumber="1">
          <UnitOfMeasure>EA</UnitOfMeasure>
        </ShipNoticeItem>
        <ShipNoticeItem quantity="6" lineNumber="2">
          <UnitOfMeasure>EA</UnitOfMeasure>
        </ShipNoticeItem>  
      </ShipNoticePortion>
    </ShipNoticeRequest>
  </Request>
</cXML>
'''

def parsed = new XmlSlurper().parseText xml

println parsed.Request.ShipNoticeRequest.ShipNoticeHeader.Contact.Name.text()

==> AKJ Books

Вы используете XmlSlurper для анализа xml, а затем просто идете по дереву к нужному узлу.

...