Skip to content
Snippets Groups Projects
Commit 0a45feec authored by Jan Zickermann's avatar Jan Zickermann
Browse files

OZG-5808 Xdomea: Simplify xpath expression for xmlcode

parent fabaafa6
No related branches found
No related tags found
No related merge requests found
......@@ -22,28 +22,15 @@ import de.ozgcloud.eingang.common.formdata.IncomingFile;
public class XdomeaXMLValueReader {
private static final String DATEINAME_NODE_QUERY_STRING = "//Hauptobjekt//Dateiname";
private static final XPathExpression DATEINAME_NODE_QUERY = compileXPathExpression(DATEINAME_NODE_QUERY_STRING);
// Query für XML-Dateien in Anlagen
// Siehe auch https://www.xrepository.de/details/urn:xoev-de:xdomea:kosit:standard:xdomea
// und https://www.xrepository.de/details/urn:xoev-de:xdomea:codeliste:dateiformat
public static final String ANLAGE_NODE_QUERY_DFOERDER = "//Anlage//Format/Name[@listURI='urn:xoev-de:xdomea:codeliste:dateiformat']/code[.='030']/../..//Dateiname";
public static final String ANLAGE_NODE_QUERY_AFM = "//Anlage//Format/Name[substring(., 1, 3)='030']/..//Dateiname";
public static final String ANLAGE_NODE_QUERY_STRING = ANLAGE_NODE_QUERY_DFOERDER + " | " + ANLAGE_NODE_QUERY_AFM;
private static final XPathExpression ANLAGE_NODE_QUERY = compileXPathExpression(ANLAGE_NODE_QUERY_STRING);
// Interpret XML-Attachments as representations
// XML filetype code: 030 (see https://www.xrepository.de/details/urn:xoev-de:xdomea:codeliste:dateiformat)
private static final String DATEINAME_NODE_FOR_XML_ANHANG_QUERY_STRING = "//Anlage//Format/Name[contains(., '030')]/..//Dateiname";
private static final XPathExpression DATEINAME_NODE_QUERY = compileXPathExpression(
DATEINAME_NODE_QUERY_STRING + "|" + DATEINAME_NODE_FOR_XML_ANHANG_QUERY_STRING);
public List<String> readRepresentationFileNames(IncomingFile xdomeaXMLFile) {
var parsedXML = XMLHelper.parseDocument(xdomeaXMLFile).getDocumentElement();
return Stream.concat(
getTextsFromNodes(
queryDateinameNodeList(
parsedXML
)),
getTextsFromNodes(
queryAnlageNodeList(
parsedXML
))
).toList();
return getTextsFromNodes(queryDateinameNodeList(parsedXML)).toList();
}
private NodeList queryDateinameNodeList(Element contextElement) {
......@@ -58,18 +45,6 @@ public class XdomeaXMLValueReader {
}
}
private NodeList queryAnlageNodeList(Element contextElement) {
try {
return (NodeList) ANLAGE_NODE_QUERY
.evaluate(
contextElement,
XPathConstants.NODESET
);
} catch (XPathExpressionException e) {
throw new TechnicalException("Failed to execute xpath search!", e);
}
}
private Stream<String> getTextsFromNodes(NodeList nodeList) {
return streamNodeList(nodeList)
.map(Node::getTextContent)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment