bufr/src/main/java/ucar/nc2/iosp/bufr/tables/WmoXmlReader.java
static void readWmoXmlTableD(InputStream ios, TableD tableD) throws IOException {
    org.jdom2.Document doc;
    try {
      SAXBuilder builder = new SAXBuilder();
      doc = builder.build(ios);
    } catch (JDOMException e) {
      throw new IOException(e.getMessage());
    }

    int currSeqno = -1;
    TableD.Descriptor currDesc = null;

    Element root = doc.getRootElement();

    String[] elems = null;
    for (Version v : Version.values()) {
      elems = v.getElemNamesD();
      List<Element> featList = root.getChildren(elems[0]);
      if (featList != null && featList.size() > 0) {
        break;
      }
    }

    if (elems == null) {
      elems = Version.BUFR_WMO.getElemNamesD();
    }

    List<Element> featList = root.getChildren();
    for (Element elem : featList) {
      Element ce = elem.getChild(elems[1]);
      if (ce == null) continue;

      String seqs = elem.getChildTextNormalize("FXY1");
      int seq = Integer.parseInt(seqs);

      if (currSeqno != seq) {
        int y = seq % 1000;
        int w = seq / 1000;
        int x = w % 100;
        String seqName = Util.cleanName(elem.getChildTextNormalize(elems[1]));
        currDesc = tableD.addDescriptor((short) x, (short) y, seqName, new ArrayList<Short>());
        currSeqno = seq;
      }

      String fnos = elem.getChildTextNormalize("FXY2");
      int fno = Integer.parseInt(fnos);
      int y = fno % 1000;
      int w = fno / 1000;
      int x = w % 100;
      int f = w / 100;
      int fxy = (f << 14) + (x << 8) + y;
      currDesc.addFeature((short) fxy);
    }
    ios.close();
  }
static void readWmoXmlTableD(InputStream ios, TableD tableD) throws IOException {
    org.jdom2.Document doc;
    try {
      SAXBuilder builder = new SAXBuilder();
      doc = builder.build(ios);
    } catch (JDOMException e) {
      throw new IOException(e.getMessage());
    }

    int currSeqno = -1;
    TableD.Descriptor currDesc = null;

    Element root = doc.getRootElement();

    String[] elems = null;
    for (Version v : Version.values()) {
      elems = v.getElemNamesD();
      List<Element> featList = root.getChildren(elems[0]);
      if (featList != null && featList.size() > 0) {
        break;
      }
    }

    if (elems == null) {
      elems = Version.BUFR_WMO.getElemNamesD();
    }

    List<Element> featList = root.getChildren();
    for (Element elem : featList) {
      Element ce = elem.getChild(elems[1]);
      if (ce == null) continue;

      String seqs = elem.getChildTextNormalize("FXY1");
      int seq = Integer.parseInt(seqs);

      if (currSeqno != seq) {
        int y = seq % 1000;
        int w = seq / 1000;
        int x = w % 100;
        String seqName = Util.cleanName(elem.getChildTextNormalize(elems[1]));
        currDesc = tableD.addDescriptor((short) x, (short) y, seqName, new ArrayList<Short>());
        currSeqno = seq;
      }

      String fnos = elem.getChildTextNormalize("FXY2");
      int fno = Integer.parseInt(fnos);
      int y = fno % 1000;
      int w = fno / 1000;
      int x = w % 100;
      int f = w / 100;
      int fxy = (f << 14) + (x << 8) + y;
      currDesc.addFeature((short) fxy);
    }
    ios.close();
  }
static void readWmoXmlTableD ( InputStream ios , TableD tableD ) throws IOException { org . jdom2 . Document doc ; try { SAXBuilder builder = new SAXBuilder ( ) ; doc = builder . build ( ios ) ; } catch ( JDOMException e ) { throw new IOException ( e . getMessage ( ) ) ; } int currSeqno = - 1 ; TableD . Descriptor currDesc = null ; Element root = doc . getRootElement ( ) ; String [ ] elems = null ; for ( Version v : Version . values ( ) ) { elems = v . getElemNamesD ( ) ; List < Element > featList = root . getChildren ( elems [ 0 ] ) ; if ( featList != null && featList . size ( ) > 0 ) { break ; } } if ( elems == null ) { elems = Version . BUFR_WMO . getElemNamesD ( ) ; } List < Element > featList = root . getChildren ( ) ; for ( Element elem : featList ) { Element ce = elem . getChild ( elems [ 1 ] ) ; if ( ce == null ) continue ; String seqs = elem . getChildTextNormalize ( "FXY1" ) ; int seq = Integer . parseInt ( seqs ) ; if ( currSeqno != seq ) { int y = seq % 1000 ; int w = seq / 1000 ; int x = w % 100 ; String seqName = Util . cleanName ( elem . getChildTextNormalize ( elems [ 1 ] ) ) ; currDesc = tableD . addDescriptor ( ( short ) x , ( short ) y , seqName , new ArrayList < Short > ( ) ) ; currSeqno = seq ; } String fnos = elem . getChildTextNormalize ( "FXY2" ) ; int fno = Integer . parseInt ( fnos ) ; int y = fno % 1000 ; int w = fno / 1000 ; int x = w % 100 ; int f = w / 100 ; int fxy = ( f << 14 ) + ( x << 8 ) + y ; currDesc . addFeature ( ( short ) fxy ) ; } ios . close ( ) ; }
/*
<B_TableD_BUFR14_1_0_CREX_6_1_0>
<SNo>2647</SNo>
<Category>10</Category>
<FXY1>310013</FXY1>
<ElementName1_E>(AVHRR (GAC) report)</ElementName1_E>
<FXY2>004005</FXY2>
<ElementName2_E>Minute</ElementName2_E>
<Remarks_E>Minute</Remarks_E>
<Status>Operational</Status>
</B_TableD_BUFR14_1_0_CREX_6_1_0>

14.2.0
<Exporting_BUFRTableD_E>
<No>2901</No>
<Category>10</Category>
<CategoryOfSequences>Vertical sounding sequences (satellite data)</CategoryOfSequences>
<FXY1>310025</FXY1>
<ElementName1>(SSMIS Temperature data record)</ElementName1>
<FXY2>004006</FXY2>
<Status>Operational</Status>
</Exporting_BUFRTableD_E>

15.1.1
<Exp_BUFRTableD_E>
<No>102</No>
<Category>01</Category>
<CategoryOfSequences_E>Location and identification sequences</CategoryOfSequences_E>
<FXY1>301034</FXY1>
<Title_E>(Buoy/platform - fixed)</Title_E>
<FXY2>001005</FXY2>
<ElementName_E>Buoy/platform identifier</ElementName_E>
<ExistingElementName_E>Buoy/platform identifier</ExistingElementName_E>
<Status>Operational</Status>
</Exp_BUFRTableD_E>

16.0.0
<Exp_BUFRTableD_E>
<No>402</No>
<Category>02</Category>
<CategoryOfSequences_E>Meteorological sequences common to surface data</CategoryOfSequences_E>
<FXY1>302001</FXY1>
<FXY2>010051</FXY2>
<ElementName_E>Pressure reduced to mean sea level</ElementName_E>
<ExistingElementName_E>Pressure reduced to mean sea level</ExistingElementName_E>
<Status>Operational</Status>
</Exp_BUFRTableD_E>

<BUFR_19_1_1_TableD_en>
<No>4</No>
<Category>00</Category>
<CategoryOfSequences_en>BUFR table entries sequences</CategoryOfSequences_en>
<FXY1>300003</FXY1>
<Title_en>(F, X, Y of descriptor to be added or defined)</Title_en>
<FXY2>000011</FXY2>
<ElementName_en>X descriptor to be added or defined</ElementName_en>
<Status>Operational</Status>
</BUFR_19_1_1_TableD_en>

<BUFR_22_0_1_TableD_en>
<No>5874</No>
<Category>15</Category>
<CategoryOfSequences_en>Oceanographic report sequences</CategoryOfSequences_en>
<FXY1>315004</FXY1>
<Title_en>(XBT temperature profile data sequence)</Title_en>
<FXY2>025061</FXY2>
<ElementName_en>Software identification and version number</ElementName_en>
<Status>Operational</Status>
</BUFR_22_0_1_TableD_en>
/ * <B_TableD_BUFR14_1_0_CREX_6_1_0 > <SNo > 2647< / SNo > <Category > 10< / Category > <FXY1 > 310013< / FXY1 > <ElementName1_E > ( AVHRR ( GAC ) report ) < / ElementName1_E > <FXY2 > 004005< / FXY2 > <ElementName2_E > Minute< / ElementName2_E > <Remarks_E > Minute< / Remarks_E > <Status > Operational< / Status > < / B_TableD_BUFR14_1_0_CREX_6_1_0 >