An utility to decode or unescape HTML characters in XML (EDI) documents
This is a procedure to use in Seeburger BIC Mapping Designer
It will extend your library for string handling
/* -----------------------------
Peter Lykkegaard, 25 apr 2023
-----------------------------
procedure unescapeHTML
Parameters:
Source / String, alphanumeric
Output
String, alphanumericString
Adapted from How to Unescape HTML in Java using Plain Java
https://howtodoinjava.com/java/string/unescape-html-to-string/
----------------------------- */
local lvOutput$;
#importJavaStart
import java.util.HashMap;
#importJavaEnd
// Save source in case changes are not needed
copy pSource$ to lvOutput$;
// Check for any ampersand / & character
if (containsSubstring(pSource$, "&") != 0)
if (containsSubstring(pSource$, "&") != 0)
// HTML decode ampersand / &
copy replaceAll(pSource$, "&", "&") to pSource$;
endif
#javastart
int i, j;
boolean continueLoop;
int skip = 0;
HashMap<String, String> htmlEntities = new HashMap<String, String>();
htmlEntities.put("<", "<");
htmlEntities.put(">", ">");
htmlEntities.put("&", "&");
htmlEntities.put(""", "\"");
htmlEntities.put(" ", " ");
htmlEntities.put("©", "\u00a9");
htmlEntities.put("®", "\u00ae");
htmlEntities.put("€", "\u20a0");
htmlEntities.put("Å", "Å");
htmlEntities.put("Æ", "Æ");
htmlEntities.put("Ø", "Ø");
htmlEntities.put("å", "å");
htmlEntities.put("æ", "æ");
htmlEntities.put("ø", "ø");
String source = _StrVar_PSOURCE.getString();
do {
continueLoop = false;
i = source.indexOf("&", skip);
if (i > -1) {
j = source.indexOf(";", i);
if (j > i) {
String entityToLookFor = source.substring(i, j + 1);
String value = (String) htmlEntities.get(entityToLookFor);
if (value != null) {
source = source.substring(0, i) + value + source.substring(j + 1);
continueLoop = true;
} else if (value == null) {
skip = i + 1;
continueLoop = true;
}
}
}
} while (continueLoop);
_StrVar_LVOUTPUT.setString(source);
#javaend
endif
exitProc(lvOutput$);
An utility to format current datetime as a UTC string according to RFC 3339
A procedure to use in Seeburger BIC Mapping Designer
It will extend your library for string handling
- Get current date / time with time zone (system default)
- Format output
// -----------------------------
// Peter Lykkegaard, 30 okt 2024
// -----------------------------
// procedure getCurrentDateTimeUTC
// Parameters: None
// Get current date / time
// Format as String in UTC RFC 3339 format (eg 2022-10-13T23:37:18+02:00)
// Output
// alphanumeric / String
// Ref: https://medium.easyread.co/understanding-about-rfc-3339-for-datetime-formatting-in-software-engineering-940aa5d5f68a
#importJavaStart
import java.time.format.DateTimeFormatter;
import java.time.OffsetDateTime;
#importJavaEnd
local output$;
#javaStart
String output;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
OffsetDateTime now = OffsetDateTime.now();
output = dtf.format(now);
_StrVar_OUTPUT.setString(output);
#javaEnd
exitProc(output$);
Same but with inout parameters
- Concatenate parameters
- Parse string
- Add system default time zone
- Format output
// -----------------------------
// Peter Lykkegaard, 24 okt 2024
// -----------------------------
// procedure getCurrentDateTimeUTC
// Parameters: None
// Parse given date / time from IDOC
// Format expected is yyyyMMdd / HHmmss
// Format as String in UTC RFC 3339 format (eg 2022-10-13T23:37:18+02:00)
// Params
// Date$: Alphanyumeric
// Time$: Alphanyumeric
// Output
// alphanumeric / String
// Ref: https://medium.easyread.co/understanding-about-rfc-3339-for-datetime-formatting-in-software-engineering-940aa5d5f68a
#importJavaStart
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.OffsetDateTime;
#importJavaEnd
local output$;
#javaStart
String documentDate = _StrVar_DATE.getString();
String documentTime = _StrVar_TIME.getString();
String output;
String localDateTimePattern = "yyyyMMddHHmmss";
String offsetDataTimePattern = "yyyy-MM-dd'T'HH:mm:ssXXX";
String documentDateTime = documentDate + documentTime;
DateTimeFormatter dtf;
dtf = DateTimeFormatter.ofPattern(localDateTimePattern);
LocalDateTime dateTime = LocalDateTime.parse(documentDateTime, dtf);
ZoneId zoneId = ZoneId.systemDefault();
OffsetDateTime odt = ZonedDateTime.of(dateTime, zoneId).toOffsetDateTime();
dtf = DateTimeFormatter.ofPattern(offsetDataTimePattern);
output = dtf.format(odt);
_StrVar_OUTPUT.setString(output);
#javaEnd
exitProc(output$);
An utility to remove leading zeros from a string
A procedure to use in Seeburger BIC Mapping Designer
It will extend your library for string handling
// -----------------------------
// Peter Lykkegaard, 18 april 2020
// -----------------------------
// Remove leading zeros
// TODO! Check parameters if they are of valid type/content
//
// Name: unZeroFill
// Description:
// Parameters
// input$, alphanumerical / String which have leading zeros removed
// Output, alphanumeric / String without leading zeros
local output$;
#javaStart
String output = _StrVar_INPUT.getString();
// Only if numeric remove leading zeros
if (output.matches("\\d+"))
{
output = output.replaceFirst("^0+(?!$)", "");
}
_StrVar_OUTPUT.setString(output);
#javaEnd
exitProc(output$);
An utility to split a string based on an character
A procedure to use in Seeburger BIC Mapping Designer
It will extend your library for string handling
// -----------------------------
// Peter Lykkegaard, 22 mar 2019
// -----------------------------
// Split string into its sub components based input characters
// TODO! Check paramteters if they are of valid type/content
//
// Name: splitString
// Description:
// Parameters
// input$, alphanumerical / String which needs to be split
// criteria$, alphanumerical / Character to split
// Output, alphanumeric / array / Array of strings to return
local output$[];
#javastart
final String input = _StrVar_INPUT.getString();
final String criteria = _StrVar_CRITERIA.getString();
String[] data;
if ((criteria == "-") || (criteria == "+") || (criteria == "|"))
{
data = input.split("\\" + criteria + "|\\*|\\/");
}
else
{
data = input.split(criteria, 0);
}
int idx = 0;
for (int i = 0; i < data.length; i++)
{
_StrVar_OUTPUT.getJuVar(idx, 2).setString(data[i]);
idx++;
}
#javaEnd
exitProc(output$);
XSLT transformations using XMLUnit.NET
Load source document and call transformation
// -----------------------------
var source = Org.XmlUnit.Builder.Input.ByTransforming(Org.XmlUnit.Builder.Input.FromFile(""))
.WithStylesheet(Org.XmlUnit.Builder.Input.FromFile(""))
.Build();
References