A few years ago I wrote a python script to do this. It will need rewriting for the current API but you can see the workflow in the code
import PhotoScan
from xml.dom import minidom
path = PhotoScan.app.getOpenFileName("Specify input XML file:")
doc = PhotoScan.app.document
chunk = doc.chunk
xml = minidom.parse(path)
main = xml.childNodes[0]
xml_markers_reference = xml.childNodes[0].childNodes[1].childNodes[5]
xml_markers_proj = xml.childNodes[0].childNodes[1].childNodes[7].childNodes[1].childNodes[1]
xml_camera = xml.childNodes[0].childNodes[1].childNodes[3]
cameras = dict()
markers = dict()
marker_proj = dict()
marker_proj_pins = dict()
for i in range(1, len(xml_camera.childNodes) - 1, 2):
camera_id = xml_camera.childNodes[i].getAttribute("id")
camera_label = xml_camera.childNodes[i].getAttribute("label")
cameras[camera_label] = camera_id
for i in range(1, len(xml_markers_reference.childNodes) - 1, 2):
marker_id = xml_markers_reference.childNodes[i].getAttribute("id")
marker_label = xml_markers_reference.childNodes[i].getAttribute("label")
markers[marker_id] = marker_label
for i in range(1, len(xml_markers_proj.childNodes) - 1, 2):
cam_list = dict()
pinned_list = dict()
marker_id = xml_markers_proj.childNodes[i].getAttribute("marker_id")
for j in range(1, len(xml_markers_proj.childNodes[i].childNodes) - 1, 2):
camera_id = xml_markers_proj.childNodes[i].childNodes[j].getAttribute("camera_id")
x = float(xml_markers_proj.childNodes[i].childNodes[j].getAttribute("x"))
y = float(xml_markers_proj.childNodes[i].childNodes[j].getAttribute("y"))
pinned = xml_markers_proj.childNodes[i].childNodes[j].getAttribute("pinned")
cam_list[camera_id] = PhotoScan.Vector([x, y])
pinned_list[camera_id] = pinned.lower() in ("yes", "true", "1")
marker_proj[marker_id] = cam_list
marker_proj_pins[marker_id] = pinned_list
for marker_id in marker_proj.keys():
dup_found = False
for mrkr in chunk.markers:
if mrkr.label == markers[marker_id]:
m = mrkr
print ("Duplicate Marker found " + mrkr.label + " - using it")
dup_found = True
if not dup_found:
chunk.addMarker()
m = chunk.markers[-1]
m.label = markers[marker_id]
for camera in chunk.cameras:
if camera.label in cameras.keys():
if cameras[camera.label] in marker_proj[marker_id].keys():
print ("Adding camera " + camera.label + " to marker " + m.label )
m.projections[camera] = marker_proj[marker_id][cameras[camera.label]]
if marker_proj_pins[marker_id][cameras[camera.label]] :
print ("Setting pin to True")
m.projections[camera].pinned = marker_proj_pins[marker_id][cameras[camera.label]]
print("Script finished")