Program: 36963
Project: 36963
Buggy source:
/** 
 * Annotate article with annotation schema.
 * @param a the read article
 */
public void AnnotateArticle(Article a){
  try {
    Utilities.MakeDirectory("String_Node_Str");
    DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
    Document doc=docBuilder.newDocument();
    Element rootElement=doc.createElement("String_Node_Str");
    doc.appendChild(rootElement);
    Element pmcid=doc.createElement("String_Node_Str");
    pmcid.setTextContent(a.getPmc());
    rootElement.appendChild(pmcid);
    Element pcid=doc.createElement("String_Node_Str");
    pcid.setTextContent(a.getPmid());
    rootElement.appendChild(pcid);
    Element pissn=doc.createElement("String_Node_Str");
    pissn.setTextContent(a.getPissn());
    rootElement.appendChild(pissn);
    Element eissn=doc.createElement("String_Node_Str");
    eissn.setTextContent(a.getEissn());
    rootElement.appendChild(eissn);
    Element title=doc.createElement("String_Node_Str");
    title.setTextContent(a.getTitle());
    rootElement.appendChild(title);
    Element authors=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getAuthors().size(); i++) {
      Element author=doc.createElement("String_Node_Str");
      Element authorName=doc.createElement("String_Node_Str");
      authorName.setTextContent(a.getAuthors().get(i).name);
      author.appendChild(authorName);
      for (int j=0; j < a.getAuthors().get(i).affiliation.size(); j++) {
        Element AuthorAffiliation=doc.createElement("String_Node_Str");
        AuthorAffiliation.setTextContent(a.getAuthors().get(i).affiliation.get(j));
        author.appendChild(AuthorAffiliation);
      }
      Element authorEmail=doc.createElement("String_Node_Str");
      authorEmail.setTextContent(a.getAuthors().get(i).email);
      author.appendChild(authorEmail);
      authors.appendChild(author);
    }
    rootElement.appendChild(authors);
    Element keywords=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getKeywords().length; i++) {
      Element keyword=doc.createElement("String_Node_Str");
      keyword.setTextContent(a.getKeywords()[i]);
      keywords.appendChild(keyword);
    }
    rootElement.appendChild(keywords);
    Element publisher=doc.createElement("String_Node_Str");
    Element publisherName=doc.createElement("String_Node_Str");
    publisherName.setTextContent(a.getPublisher_name());
    publisher.appendChild(publisherName);
    Element publisherLoc=doc.createElement("String_Node_Str");
    publisherLoc.setTextContent(a.getPublisher_loc());
    publisher.appendChild(publisherLoc);
    rootElement.appendChild(publisher);
    Element venue=doc.createElement("String_Node_Str");
    venue.setTextContent(a.getVenue());
    publisher.appendChild(venue);
    Element journal=doc.createElement("String_Node_Str");
    journal.setTextContent(a.getJournal_name());
    publisher.appendChild(journal);
    Element abstractEl=doc.createElement("String_Node_Str");
    abstractEl.setTextContent(a.getAbstract());
    rootElement.appendChild(abstractEl);
    Table[] tables=a.getTables();
    Element tablesEl=doc.createElement("String_Node_Str");
    rootElement.appendChild(tablesEl);
    for (int i=0; i < tables.length; i++) {
      Element tableEl=doc.createElement("String_Node_Str");
      tablesEl.appendChild(tableEl);
      Table table=tables[i];
      Element TabOrder=doc.createElement("String_Node_Str");
      TabOrder.setTextContent(table.getTable_title());
      tableEl.appendChild(TabOrder);
      Element TabCaption=doc.createElement("String_Node_Str");
      TabCaption.setTextContent(table.getTable_caption());
      tableEl.appendChild(TabCaption);
      Element TabFooter=doc.createElement("String_Node_Str");
      TabFooter.setTextContent(table.getTable_footer());
      tableEl.appendChild(TabFooter);
      Element TabStructure=doc.createElement("String_Node_Str");
      if (table.getTableStructureType() == null) {
        table.setTableStructureType(StructureType.NULL);
      }
      TabStructure.setTextContent(table.getTableStructureType().toString());
      tableEl.appendChild(TabStructure);
      Element TabPragmatic=doc.createElement("String_Node_Str");
      TabPragmatic.setTextContent(table.PragmaticClass);
      tableEl.appendChild(TabPragmatic);
      Element TabHasXML=doc.createElement("String_Node_Str");
      if (table.isNoXMLTable())       TabHasXML.setTextContent("String_Node_Str");
 else       TabHasXML.setTextContent("String_Node_Str");
      tableEl.appendChild(TabHasXML);
      Element CellsEl=doc.createElement("String_Node_Str");
      tableEl.appendChild(CellsEl);
      Cell[][] cells=table.original_cells;
      if (cells != null) {
        for (int j=0; j < cells.length; j++) {
          for (int k=0; k < cells[j].length; k++) {
            if (k == 0 && cells[j][k].isIs_header()) {
              cells[j][k].setIs_stub(true);
            }
            Element CellEl=doc.createElement("String_Node_Str");
            CellsEl.appendChild(CellEl);
            Element CellID=doc.createElement("String_Node_Str");
            String cellIDStr="String_Node_Str" + j + "String_Node_Str"+ k;
            CellID.setTextContent(cellIDStr);
            cells[j][k].CellId=cellIDStr;
            CellEl.appendChild(CellID);
            if (cells[j][k].getSuperRowIndex() != null && !cells[j][k].getSuperRowIndex().equals("String_Node_Str")) {
              Element SuperRowRef=doc.createElement("String_Node_Str");
              SuperRowRef.setTextContent(cells[j][k].getSuperRowIndex());
              cells[j][k].setSuper_row_ref(cells[j][k].getSuperRowIndex());
              CellEl.appendChild(SuperRowRef);
            }
            Element CellValue=doc.createElement("String_Node_Str");
            CellValue.setTextContent(cells[j][k].getCell_content());
            CellEl.appendChild(CellValue);
            String valueToParse=cells[j][k].getCell_content();
            LinkedList<ValueItem> valueTags=TablInExMain.vp.parseValue(valueToParse);
            Element CellSemantics=doc.createElement("String_Node_Str");
            CellEl.appendChild(CellSemantics);
            for (int p=0; p < valueTags.size(); p++) {
              Annotation annot=new Annotation();
              Element CellValueSemantics=doc.createElement("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setType("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).type.toString());
              annot.setTypeVal(valueTags.get(p).type.toString());
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).start_position + "String_Node_Str");
              annot.setStart(valueTags.get(p).start_position);
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).end_position + "String_Node_Str");
              annot.setEnd(valueTags.get(p).end_position);
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).value);
              annot.setContent(valueTags.get(p).value);
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setID("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setURL("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setSource("String_Node_Str");
              cells[j][k].annotations.add(annot);
              CellSemantics.appendChild(CellValueSemantics);
            }
            int mathTypeIndex=valueToParse.indexOf("String_Node_Str");
            if (mathTypeIndex > 0) {
              valueToParse=valueToParse.substring(0,mathTypeIndex);
            }
            LinkedList<Word> words=null;
            if (valueToParse != null) {
              valueToParse=valueToParse.trim();
              if (!Utilities.isSpaceOrEmpty(valueToParse)) {
                words=TablInExMain.marvin.annotate(valueToParse);
              }
            }
            if (words != null) {
              for (int p=0; p < words.size(); p++) {
                for (int s=0; s < words.get(p).wordmeanings.size(); s++) {
                  Element Meaning=doc.createElement("String_Node_Str");
                  Annotation annot=new Annotation();
                  Meaning.setAttribute("String_Node_Str","String_Node_Str");
                  annot.setType("String_Node_Str");
                  Meaning.setAttribute("String_Node_Str","String_Node_Str");
                  annot.setTypeVal("String_Node_Str");
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).Source);
                  annot.setSource(words.get(p).wordmeanings.get(s).Source);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).id);
                  annot.setID(words.get(p).wordmeanings.get(s).id);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).URL);
                  annot.setURL(words.get(p).wordmeanings.get(s).URL);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).startAt + "String_Node_Str");
                  annot.setStart(words.get(p).wordmeanings.get(s).startAt);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).endAt + "String_Node_Str");
                  annot.setEnd(words.get(p).wordmeanings.get(s).endAt);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).appearingWord);
                  annot.setContent(words.get(p).wordmeanings.get(s).appearingWord);
                  cells[j][k].annotations.add(annot);
                  CellSemantics.appendChild(Meaning);
                }
              }
            }
            Element CellType=doc.createElement("String_Node_Str");
            CellType.setTextContent(cells[j][k].getCellType());
            CellEl.appendChild(CellType);
            for (int s=j - 1; s >= 0; s--) {
              if (s >= 0 && cells[j][k].isIs_header() && !cells[s][k].isIs_header() && !cells[j][k].getCell_content().equals("String_Node_Str")) {
                break;
              }
              if (s >= 0 && cells[s][k] != null && cells[j][k].isIs_header() && !cells[j - 1][k].isIs_header()) {
                break;
              }
              if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header()) {
                Element HeaderRef=doc.createElement("String_Node_Str");
                String href="String_Node_Str" + s + "String_Node_Str"+ k;
                HeaderRef.setTextContent(href);
                cells[j][k].setHeader_ref(href);
                CellEl.appendChild(HeaderRef);
              }
              if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header()) {
                Element HeaderCatRef=doc.createElement("String_Node_Str");
                String hsref="String_Node_Str" + s + "String_Node_Str"+ 0;
                HeaderCatRef.setTextContent(hsref);
                cells[j][k].setHead_stub_ref(hsref);
                CellEl.appendChild(HeaderCatRef);
                break;
              }
            }
            for (int s=k - 1; s >= 0; s--) {
              if (s >= 0 && cells[j][s] != null && cells[j][s].isIs_stub()) {
                Element StubRef=doc.createElement("String_Node_Str");
                String sref="String_Node_Str" + j + "String_Node_Str"+ s;
                StubRef.setTextContent(sref);
                cells[j][k].setStub_ref(sref);
                if (cells[j][k].isIs_header() || cells[j][k].isIs_subheader()) {
                  cells[j][k].setStub_values(cells[j][s].getCell_content());
                }
                CellEl.appendChild(StubRef);
                break;
              }
            }
            Element CellRoles=doc.createElement("String_Node_Str");
            CellEl.appendChild(CellRoles);
            boolean isDataCell=true;
            if (cells[j][k].isIs_header()) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
              isDataCell=false;
            }
            if (cells[j][k].isIs_stub() && cells[j][k].getColumnspanning_index() == 0) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
              isDataCell=false;
            }
            boolean isSuperRow=false;
            for (int l=0; l < 5; l++) {
              if (cells[j][k] != null && j + l < cells.length && cells[j + l][k] != null && cells[j + l][k].getSuperRowIndex() != null && cells[j + l][k].getSuperRowIndex().equals(cells[j][k].CellId)) {
                isSuperRow=true;
                break;
              }
            }
            if (isSuperRow) {
              for (int l=0; l < cells[j].length; l++) {
                cells[j][l].setIs_subheader(true);
              }
            }
            if (cells[j][k].isIs_subheader()) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
            }
            if (isDataCell) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
            }
            Element CellRow=doc.createElement("String_Node_Str");
            CellRow.setTextContent(j + "String_Node_Str");
            CellEl.appendChild(CellRow);
            Element CellColumn=doc.createElement("String_Node_Str");
            CellColumn.setTextContent(k + "String_Node_Str");
            CellEl.appendChild(CellColumn);
          }
        }
      }
    }
    TransformerFactory transformerFactory=TransformerFactory.newInstance();
    Transformer transformer=transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT,"String_Node_Str");
    DOMSource source;
    source=new DOMSource(doc);
    StreamResult result=new StreamResult(new File("String_Node_Str" + a.getPmc() + "String_Node_Str"));
    transformer.transform(source,result);
  }
 catch (  Exception ex) {
    ex.printStackTrace();
  }
}

Fixed version (ground truth):
/** 
 * Annotate article with annotation schema.
 * @param a the read article
 */
public void AnnotateArticle(Article a){
  try {
    Utilities.MakeDirectory(TablInExMain.Inpath + "String_Node_Str");
    DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
    Document doc=docBuilder.newDocument();
    Element rootElement=doc.createElement("String_Node_Str");
    doc.appendChild(rootElement);
    Element pmcid=doc.createElement("String_Node_Str");
    pmcid.setTextContent(a.getPmc());
    rootElement.appendChild(pmcid);
    Element pcid=doc.createElement("String_Node_Str");
    pcid.setTextContent(a.getPmid());
    rootElement.appendChild(pcid);
    Element pissn=doc.createElement("String_Node_Str");
    pissn.setTextContent(a.getPissn());
    rootElement.appendChild(pissn);
    Element eissn=doc.createElement("String_Node_Str");
    eissn.setTextContent(a.getEissn());
    rootElement.appendChild(eissn);
    Element title=doc.createElement("String_Node_Str");
    title.setTextContent(a.getTitle());
    rootElement.appendChild(title);
    Element authors=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getAuthors().size(); i++) {
      Element author=doc.createElement("String_Node_Str");
      Element authorName=doc.createElement("String_Node_Str");
      authorName.setTextContent(a.getAuthors().get(i).name);
      author.appendChild(authorName);
      for (int j=0; j < a.getAuthors().get(i).affiliation.size(); j++) {
        Element AuthorAffiliation=doc.createElement("String_Node_Str");
        AuthorAffiliation.setTextContent(a.getAuthors().get(i).affiliation.get(j));
        author.appendChild(AuthorAffiliation);
      }
      Element authorEmail=doc.createElement("String_Node_Str");
      authorEmail.setTextContent(a.getAuthors().get(i).email);
      author.appendChild(authorEmail);
      authors.appendChild(author);
    }
    rootElement.appendChild(authors);
    Element keywords=doc.createElement("String_Node_Str");
    for (int i=0; i < a.getKeywords().length; i++) {
      Element keyword=doc.createElement("String_Node_Str");
      keyword.setTextContent(a.getKeywords()[i]);
      keywords.appendChild(keyword);
    }
    rootElement.appendChild(keywords);
    Element publisher=doc.createElement("String_Node_Str");
    Element publisherName=doc.createElement("String_Node_Str");
    publisherName.setTextContent(a.getPublisher_name());
    publisher.appendChild(publisherName);
    Element publisherLoc=doc.createElement("String_Node_Str");
    publisherLoc.setTextContent(a.getPublisher_loc());
    publisher.appendChild(publisherLoc);
    rootElement.appendChild(publisher);
    Element venue=doc.createElement("String_Node_Str");
    venue.setTextContent(a.getVenue());
    publisher.appendChild(venue);
    Element journal=doc.createElement("String_Node_Str");
    journal.setTextContent(a.getJournal_name());
    publisher.appendChild(journal);
    Element abstractEl=doc.createElement("String_Node_Str");
    abstractEl.setTextContent(a.getAbstract());
    rootElement.appendChild(abstractEl);
    Table[] tables=a.getTables();
    Element tablesEl=doc.createElement("String_Node_Str");
    rootElement.appendChild(tablesEl);
    for (int i=0; i < tables.length; i++) {
      Element tableEl=doc.createElement("String_Node_Str");
      tablesEl.appendChild(tableEl);
      Table table=tables[i];
      Element TabOrder=doc.createElement("String_Node_Str");
      TabOrder.setTextContent(table.getTable_title());
      tableEl.appendChild(TabOrder);
      Element TabCaption=doc.createElement("String_Node_Str");
      TabCaption.setTextContent(table.getTable_caption());
      tableEl.appendChild(TabCaption);
      Element TabFooter=doc.createElement("String_Node_Str");
      TabFooter.setTextContent(table.getTable_footer());
      tableEl.appendChild(TabFooter);
      Element TabStructure=doc.createElement("String_Node_Str");
      if (table.getTableStructureType() == null) {
        table.setTableStructureType(StructureType.NULL);
      }
      TabStructure.setTextContent(table.getTableStructureType().toString());
      tableEl.appendChild(TabStructure);
      Element TabPragmatic=doc.createElement("String_Node_Str");
      TabPragmatic.setTextContent(table.PragmaticClass);
      tableEl.appendChild(TabPragmatic);
      Element TabHasXML=doc.createElement("String_Node_Str");
      if (table.isNoXMLTable())       TabHasXML.setTextContent("String_Node_Str");
 else       TabHasXML.setTextContent("String_Node_Str");
      tableEl.appendChild(TabHasXML);
      Element CellsEl=doc.createElement("String_Node_Str");
      tableEl.appendChild(CellsEl);
      Cell[][] cells=table.original_cells;
      if (cells != null) {
        for (int j=0; j < cells.length; j++) {
          for (int k=0; k < cells[j].length; k++) {
            if (k == 0 && cells[j][k].isIs_header()) {
              cells[j][k].setIs_stub(true);
            }
            Element CellEl=doc.createElement("String_Node_Str");
            CellsEl.appendChild(CellEl);
            Element CellID=doc.createElement("String_Node_Str");
            String cellIDStr="String_Node_Str" + j + "String_Node_Str"+ k;
            CellID.setTextContent(cellIDStr);
            cells[j][k].CellId=cellIDStr;
            CellEl.appendChild(CellID);
            if (cells[j][k].getSuperRowIndex() != null && !cells[j][k].getSuperRowIndex().equals("String_Node_Str")) {
              Element SuperRowRef=doc.createElement("String_Node_Str");
              SuperRowRef.setTextContent(cells[j][k].getSuperRowIndex());
              cells[j][k].setSuper_row_ref(cells[j][k].getSuperRowIndex());
              CellEl.appendChild(SuperRowRef);
            }
            Element CellValue=doc.createElement("String_Node_Str");
            CellValue.setTextContent(cells[j][k].getCell_content());
            CellEl.appendChild(CellValue);
            String valueToParse=cells[j][k].getCell_content();
            LinkedList<ValueItem> valueTags=TablInExMain.vp.parseValue(valueToParse);
            Element CellSemantics=doc.createElement("String_Node_Str");
            CellEl.appendChild(CellSemantics);
            for (int p=0; p < valueTags.size(); p++) {
              Annotation annot=new Annotation();
              Element CellValueSemantics=doc.createElement("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setType("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).type.toString());
              annot.setTypeVal(valueTags.get(p).type.toString());
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).start_position + "String_Node_Str");
              annot.setStart(valueTags.get(p).start_position);
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).end_position + "String_Node_Str");
              annot.setEnd(valueTags.get(p).end_position);
              CellValueSemantics.setAttribute("String_Node_Str",valueTags.get(p).value);
              annot.setContent(valueTags.get(p).value);
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setID("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setURL("String_Node_Str");
              CellValueSemantics.setAttribute("String_Node_Str","String_Node_Str");
              annot.setSource("String_Node_Str");
              cells[j][k].annotations.add(annot);
              CellSemantics.appendChild(CellValueSemantics);
            }
            int mathTypeIndex=valueToParse.indexOf("String_Node_Str");
            if (mathTypeIndex > 0) {
              valueToParse=valueToParse.substring(0,mathTypeIndex);
            }
            LinkedList<Word> words=null;
            if (valueToParse != null) {
              valueToParse=valueToParse.trim();
              if (!Utilities.isSpaceOrEmpty(valueToParse)) {
                words=TablInExMain.marvin.annotate(valueToParse);
              }
            }
            if (words != null) {
              for (int p=0; p < words.size(); p++) {
                for (int s=0; s < words.get(p).wordmeanings.size(); s++) {
                  Element Meaning=doc.createElement("String_Node_Str");
                  Annotation annot=new Annotation();
                  Meaning.setAttribute("String_Node_Str","String_Node_Str");
                  annot.setType("String_Node_Str");
                  Meaning.setAttribute("String_Node_Str","String_Node_Str");
                  annot.setTypeVal("String_Node_Str");
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).Source);
                  annot.setSource(words.get(p).wordmeanings.get(s).Source);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).id);
                  annot.setID(words.get(p).wordmeanings.get(s).id);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).URL);
                  annot.setURL(words.get(p).wordmeanings.get(s).URL);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).startAt + "String_Node_Str");
                  annot.setStart(words.get(p).wordmeanings.get(s).startAt);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).endAt + "String_Node_Str");
                  annot.setEnd(words.get(p).wordmeanings.get(s).endAt);
                  Meaning.setAttribute("String_Node_Str",words.get(p).wordmeanings.get(s).appearingWord);
                  annot.setContent(words.get(p).wordmeanings.get(s).appearingWord);
                  cells[j][k].annotations.add(annot);
                  CellSemantics.appendChild(Meaning);
                }
              }
            }
            Element CellType=doc.createElement("String_Node_Str");
            CellType.setTextContent(cells[j][k].getCellType());
            CellEl.appendChild(CellType);
            for (int s=j - 1; s >= 0; s--) {
              if (s >= 0 && cells[j][k].isIs_header() && !cells[s][k].isIs_header() && !cells[j][k].getCell_content().equals("String_Node_Str")) {
                break;
              }
              if (s >= 0 && cells[s][k] != null && cells[j][k].isIs_header() && !cells[j - 1][k].isIs_header()) {
                break;
              }
              if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header()) {
                Element HeaderRef=doc.createElement("String_Node_Str");
                String href="String_Node_Str" + s + "String_Node_Str"+ k;
                HeaderRef.setTextContent(href);
                cells[j][k].setHeader_ref(href);
                CellEl.appendChild(HeaderRef);
              }
              if (s >= 0 && cells[s][k] != null && cells[s][k].isIs_header()) {
                Element HeaderCatRef=doc.createElement("String_Node_Str");
                String hsref="String_Node_Str" + s + "String_Node_Str"+ 0;
                HeaderCatRef.setTextContent(hsref);
                cells[j][k].setHead_stub_ref(hsref);
                CellEl.appendChild(HeaderCatRef);
                break;
              }
            }
            for (int s=k - 1; s >= 0; s--) {
              if (s >= 0 && cells[j][s] != null && cells[j][s].isIs_stub()) {
                Element StubRef=doc.createElement("String_Node_Str");
                String sref="String_Node_Str" + j + "String_Node_Str"+ s;
                StubRef.setTextContent(sref);
                cells[j][k].setStub_ref(sref);
                if (cells[j][k].isIs_header() || cells[j][k].isIs_subheader()) {
                  cells[j][k].setStub_values(cells[j][s].getCell_content());
                }
                CellEl.appendChild(StubRef);
                break;
              }
            }
            Element CellRoles=doc.createElement("String_Node_Str");
            CellEl.appendChild(CellRoles);
            boolean isDataCell=true;
            if (cells[j][k].isIs_header()) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
              isDataCell=false;
            }
            if (cells[j][k].isIs_stub() && cells[j][k].getColumnspanning_index() == 0) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
              isDataCell=false;
            }
            boolean isSuperRow=false;
            for (int l=0; l < 5; l++) {
              if (cells[j][k] != null && j + l < cells.length && cells[j + l][k] != null && cells[j + l][k].getSuperRowIndex() != null && cells[j + l][k].getSuperRowIndex().equals(cells[j][k].CellId)) {
                isSuperRow=true;
                break;
              }
            }
            if (isSuperRow) {
              for (int l=0; l < cells[j].length; l++) {
                cells[j][l].setIs_subheader(true);
              }
            }
            if (cells[j][k].isIs_subheader()) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
            }
            if (isDataCell) {
              Element CellRole=doc.createElement("String_Node_Str");
              CellRole.setTextContent("String_Node_Str");
              cells[j][k].CellRoles.add("String_Node_Str");
              CellRoles.appendChild(CellRole);
            }
            Element CellRow=doc.createElement("String_Node_Str");
            CellRow.setTextContent(j + "String_Node_Str");
            CellEl.appendChild(CellRow);
            Element CellColumn=doc.createElement("String_Node_Str");
            CellColumn.setTextContent(k + "String_Node_Str");
            CellEl.appendChild(CellColumn);
          }
        }
      }
    }
    TransformerFactory transformerFactory=TransformerFactory.newInstance();
    Transformer transformer=transformerFactory.newTransformer();
    transformer.setOutputProperty(OutputKeys.INDENT,"String_Node_Str");
    DOMSource source;
    source=new DOMSource(doc);
    StreamResult result=new StreamResult(new File(TablInExMain.Inpath + "String_Node_Str" + a.getPmc()+ "String_Node_Str"));
    transformer.transform(source,result);
  }
 catch (  Exception ex) {
    ex.printStackTrace();
  }
}