我目前正在处理一个项目,我收到Dicom XML数据,使用SAXParser解析数据,将解析后的数据存储为Attributes对象(https://github.com/dcm4che/dcm4che/blob/master/dcm4che-core/src/main/java/org/dcm4che3/data/Attributes.java),并将Attributes对象添加到attributesList。
我用于XML的解析器是SAXParser,我还使用SAXParserFactory来创建XML解析器实例。
更改接受标头后,我现在以JSON而不是XML接收相同的DICOM数据。是否有一个JSON解析器和解析器工厂,我可以用于相同的目的?如果是这样,我应该如何修改我当前的代码?
我目前的解析代码:
public void bodyPart(int i, MultipartInputStream partInputStream) throws IOException {
try {
partInputStream.readHeaderParams();
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
Attributes dicomAttributes = new Attributes();
parser.parse(new AttributesList.NonClosingInputSteam(partInputStream), new ContentHandlerAdapter(dicomAttributes));
attributesList.add(dicomAttributes);
}
catch (ParserConfigurationException | SAXException e) {
// This should never happen unless the server returns invalid content. Log and return.
log.error("Error parsing!", e);
e.printStackTrace();
}
}
private static class NonClosingInputSteam extends FilterInputStream {
/**
* Creates a new NonClosingInputStream that wraps another input stream.
*
* @param in the input stream to be wrapped
*/
NonClosingInputSteam(InputStream in) {
super(in);
}
/**
* Overrides the default implementation of the input stream's close() method. This implementation
* does nothing.
*/
@Override
public void close() {
// Do nothing
}
}
谢谢!
答案 0 :(得分:0)
默认情况下没有,所以你必须自己编写。
但请看一下规范merging the entity data
根据DICOM的Json格式,您可以看到数据的写入方式。
进一步说,您可以根据此进行解析,以确保您的解析符合规范。