com.pixelmed.dicom
Class XMLRepresentationOfDicomObjectFactory

java.lang.Object
  extended by com.pixelmed.dicom.XMLRepresentationOfDicomObjectFactory

public class XMLRepresentationOfDicomObjectFactory
extends Object

A class to encode a representation of a DICOM object in an XML form, suitable for analysis as human-readable text, or for feeding into an XSLT-based validator, and to convert them back again.

An example of the type of output produced by this class is as follows:

<?xml version="1.0" encoding="UTF-8"?>
  <DicomObject>
    <FileMetaInformationGroupLength element="0000" group="0002" vr="UL">
      <value number="1">222</value>
    </FileMetaInformationGroupLength>
    ...
    <ImageType element="0008" group="0008" vr="CS">
      <value number="1">ORIGINAL</value>
      <value number="2">PRIMARY</value>
      <value number="3">CINE</value>
      <value number="4">NONE</value>
    </ImageType>
    ...
    <ContrastBolusAgentSequence element="0012" group="0018" vr="SQ">
      <Item number="1">
        <CodeValue element="0100" group="0008" vr="SH">
          <value number="1">C-17800</value>
        </CodeValue>
      ...
      </Item>
    </ContrastBolusAgentSequence>
    ...
    <PixelData element="0010" group="7fe0" vr="OW"/>
</DicomObject>
 

There are a number of characteristics of this form of output:

E.g., to test if an image is original, which is determined by a specific value of ImageType (0008,0008), one could write in XPath "/DicomObject/ImageType/value[@number=1] = 'ORIGINAL'". To get the code value of the contrast agent in use, one could write "/DicomObject/ContrastBolusAgentSequence/Item[@number=1]/CodeValue/value[@number=1]", or making some assumptions about cardinality and depth of nesting and removing the predicates, simply "//ContrastBolusAgentSequence/Item/CodeValue/value". One could do this from the command line with a utility such as XPathQuery.

Note that a round trip from DICOM to XML and back again does not result in full fidelity, since:

A typical example of how to invoke this class to convert DICOM to XML would be:

try {
    AttributeList list = new AttributeList();
    list.read("dicomfile",null,true,true);
    Document document = new XMLRepresentationOfDicomObjectFactory().getDocument(list);
    XMLRepresentationOfDicomObjectFactory.write(System.out,document);
} catch (Exception e) {
    e.printStackTrace(System.err);
 }
 

or even simpler, if there is no further use for the XML document:

try {
    AttributeList list = new AttributeList();
    list.read("dicomfile",null,true,true);
    XMLRepresentationOfDicomObjectFactory.createDocumentAndWriteIt(list,System.out);
} catch (Exception e) {
    e.printStackTrace(System.err);
 }
 

A typical example of converting XML back to DICOM would be:

try {
    AttributeList list = new XMLRepresentationOfDicomObjectFactory().getAttributeList("xmlfile");
    list.write(System.out,TransferSyntax.ExplicitVRLittleEndian,true,true);
} catch (Exception e) {
    e.printStackTrace(System.err);
 }
 

or if you need to handle the meta information properly:

try {
    AttributeList list = new XMLRepresentationOfDicomObjectFactory().getAttributeList("xmlfile");
    String sourceApplicationEntityTitle = Attribute.getSingleStringValueOrEmptyString(list,TagFromName.SourceApplicationEntityTitle);
    list.removeMetaInformationHeaderAttributes();
    FileMetaInformation.addFileMetaInformation(list,TransferSyntax.ExplicitVRLittleEndian,sourceApplicationEntityTitle);
    list.write(System.out,TransferSyntax.ExplicitVRLittleEndian,true,true);
} catch (Exception e) {
    e.printStackTrace(System.err);
 }
 

See Also:
XMLRepresentationOfStructuredReportObjectFactory, XPathQuery, com.pixelmed.validate, Document

Constructor Summary
XMLRepresentationOfDicomObjectFactory()
          Construct a factory object, which can be used to get XML documents from DICOM objects.
 
Method Summary
static void createDocumentAndWriteIt(AttributeList list, OutputStream out)
          Serialize an XML document (DOM tree) created from a DICOM attribute list.
 AttributeList getAttributeList(Document document)
          Given a DICOM object encoded as an XML document convert it to a list of attributes.
 AttributeList getAttributeList(InputStream stream)
          Given a DICOM object encoded as an XML document in a stream convert it to a list of attributes.
 AttributeList getAttributeList(String name)
          Given a DICOM object encoded as an XML document in a named file convert it to a list of attributes.
 Document getDocument(AttributeList list)
          Given a DICOM object encoded as a list of attributes, get an XML document as a DOM tree.
static void main(String[] arg)
          Read a DICOM dataset and write an XML representation of it to the standard output, or vice versa.
static String toString(Node node)
           
static String toString(Node node, int indent)
           
static void write(OutputStream out, Document document)
          Serialize an XML document (DOM tree).
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XMLRepresentationOfDicomObjectFactory

public XMLRepresentationOfDicomObjectFactory()
                                      throws ParserConfigurationException

Construct a factory object, which can be used to get XML documents from DICOM objects.

Throws:
ParserConfigurationException
Method Detail

getDocument

public Document getDocument(AttributeList list)

Given a DICOM object encoded as a list of attributes, get an XML document as a DOM tree.

Parameters:
list - the list of DICOM attributes

getAttributeList

public AttributeList getAttributeList(Document document)
                               throws DicomException

Given a DICOM object encoded as an XML document convert it to a list of attributes.

Parameters:
document - the XML document
Returns:
the list of DICOM attributes
Throws:
DicomException

getAttributeList

public AttributeList getAttributeList(InputStream stream)
                               throws IOException,
                                      SAXException,
                                      DicomException

Given a DICOM object encoded as an XML document in a stream convert it to a list of attributes.

Parameters:
stream - the input stream containing the XML document
Returns:
the list of DICOM attributes
Throws:
IOException
SAXException
DicomException

getAttributeList

public AttributeList getAttributeList(String name)
                               throws IOException,
                                      SAXException,
                                      DicomException

Given a DICOM object encoded as an XML document in a named file convert it to a list of attributes.

Parameters:
name - the input file containing the XML document
Returns:
the list of DICOM attributes
Throws:
IOException
SAXException
DicomException

toString

public static String toString(Node node,
                              int indent)
Parameters:
node -
indent -

toString

public static String toString(Node node)
Parameters:
node -

write

public static void write(OutputStream out,
                         Document document)
                  throws IOException,
                         TransformerConfigurationException,
                         TransformerException

Serialize an XML document (DOM tree).

Parameters:
out - the output stream to write to
document - the XML document
Throws:
IOException
TransformerConfigurationException
TransformerException

createDocumentAndWriteIt

public static void createDocumentAndWriteIt(AttributeList list,
                                            OutputStream out)
                                     throws IOException,
                                            DicomException

Serialize an XML document (DOM tree) created from a DICOM attribute list.

Parameters:
list - the list of DICOM attributes
out - the output stream to write to
Throws:
IOException
DicomException

main

public static void main(String[] arg)

Read a DICOM dataset and write an XML representation of it to the standard output, or vice versa.

Parameters:
arg - either one filename of the file containing the DICOM dataset, or a direction argument (toDICOM or toXML, case insensitive) and an input filename