Using SoftwareSerial.h with Xbee.h and not getting any result

I have little idea about AT mode but I am new in API mode for Xbee. I am trying to use Xbee.h (for API capability) in my sketch whereas I already have SoftwareSerial.h running in my sketch. I am sending a command from serial monitor and want this command to pass to other node via Xbee. I am sending it in API mode [I have tried with softwareserial to send this and it works]. As you may understand I am using SoftwareSerial.h for the command to pass in the arduino.

I am using following:
Xbee Series 1
Xbee Shield : https://solarbotics.com/product/51835/
Arduino UNO R3

From Node 1:

 #include <XBee.h>
 #include <SoftwareSerial.h>

  char charBuf23[32];
  unsigned long start = millis();
  int sensorPin = 0;
  int pin5 = 0;
  String readString;
  String NewReadString;
  
  XBee xbee = XBee();
  TxStatusResponse txStatus = TxStatusResponse();
  SoftwareSerial XbeeSerial =  SoftwareSerial(3, 2);
  
void setup() {
  Serial.begin(9600);
  xbee.setSerial(Serial);
  XbeeSerial.begin(9600);
}

void loop() {
  while (Serial.available()) {
    delay(2);  //delay to allow byte to arrive in input buffer
    char c = Serial.read();
    readString += c;
  }
  if (readString.length() >0) {
    NewReadString = readString;
    readString="";
    NewReadString.toCharArray(charBuf23,100);
    Tx16Request tx = Tx16Request(0x1874, (uint8_t * )charBuf23, strlen(charBuf23));//MY address is 0x1874
    xbee.send(tx);
    delay(1000);
  }
}

To node 2:

#include <XBee.h>

XBee xbee = XBee();

// response object to handle incomming messages 
Rx16Response rx16 = Rx16Response();
  
void setup() {
  xbee.begin(9600);
  Serial.begin(9600);
}

void loop() {
  xbee.readPacket();
  if (xbee.getResponse().isAvailable()) {
    // got something
    if (xbee.getResponse().getApiId() == RX_16_RESPONSE) {
      // got a rx packet
      xbee.getResponse().getRx16Response(rx16);
      for (int i = 0; i < rx16.getDataLength (); i++)
        Serial.print((char) rx16.getData(i));
      Serial.println();
    }
  }                  
}

Am I doing anything wrong anywhere?

EDIT: So far what I understand, SoftwareSerial only works with SoftwareSerial on the other end. If it is true, is there any other way to solve this and work with both SoftwareSerial.h and Xbee.h or I have to ditch API?

    delay(2);  //delay to allow byte to arrive in input buffer

Bullshit!

    NewReadString.toCharArray(charBuf23,100);

How do you intend to fit 100 characters in an array sized to hold 32? Why is there a 23 on the end of that name?

As you may understand I am using SoftwareSerial.h for the command to pass in the arduino.

No, you are not.

XBee xbee = XBee();

No. You never invoke the constructor directly.

Am I doing anything wrong anywhere?

Yes.

EDIT: So far what I understand, SoftwareSerial only works with SoftwareSerial on the other end.

Not true.

Thank you for your reply.

Code:

NewReadString.toCharArray(charBuf23,100);

How do you intend to fit 100 characters in an array sized to hold 32? Why is there a 23 on the end of that name?

Just a name, I will change the characters less than 32 too.

XBee xbee = XBee();

No. You never invoke the constructor directly.

I am new in programming and all the API examples showed like this, could you please let me know which is the right way to do that.

Another concern I have is I am using the Xbee shield as I mentioned earlier and I had to tamper it like this:http://stackoverflow.com/questions/17181756/how-arduino-xbee-avoids-using-the-serial-i-o-port which worked quite ok for the other SoftwareSerial.h operations. But I don't know whether this has anything to do with the new problem I am facing.

I am new in programming and all the API examples showed like this, could you please let me know which is the right way to do that.

XBee xbee;

The constructor WILL be invoked, implicitly.