in src/main/java/org/apache/maven/xinclude/stax/ElementPointerPart.java [167:220]
static ElementPointerPart parseFromString(final String schemeData) throws InvalidXPointerException {
List<Integer> childSequence;
String elementID = null;
int startChar;
int endChar;
// Find an NCName if it exists?
startChar = schemeData.indexOf("/");
// -1 Only an NCName. 0 No NCName. > 1 An NCName.
switch (startChar) {
case -1: // Only an NCName.
elementID = schemeData;
if (!NCName.isValid(elementID)) {
throw new InvalidXPointerException("Invalid NCName in the XPointer", schemeData);
}
return new ElementPointerPart(elementID);
case 0: // No NCName.
break;
default: // An NCName.
elementID = schemeData.substring(0, startChar);
if (!NCName.isValid(elementID)) {
throw new InvalidXPointerException("Invalid NCName in the XPointer", schemeData, 0, startChar);
}
break;
}
// Find remaining child sequence.
childSequence = new ArrayList<>();
endChar = schemeData.indexOf("/", startChar + 1);
// -1 Only single child sequence element. > 0 A childSequence.
if (endChar < 0) { // Only single child sequence element.
childSequence.add(parseIntegerFromChildSequence(schemeData, startChar + 1, schemeData.length()));
} else { // Multiple child sequence elements.
while (true) {
if (endChar < 0) { // Last integer.
childSequence.add(parseIntegerFromChildSequence(schemeData, startChar + 1, schemeData.length()));
break;
} else { // Inner sequence integer.
childSequence.add(parseIntegerFromChildSequence(schemeData, startChar + 1, endChar));
startChar = endChar;
endChar = schemeData.indexOf("/", startChar + 1);
}
}
}
if (elementID == null) { // Only a childSequence
return new ElementPointerPart(childSequence);
} else { // Both NCName and childSequence
return new ElementPointerPart(elementID, childSequence);
}
}