Fix XML node length with autoclosing element
This commit is contained in:
@@ -40,7 +40,6 @@ class DOMLineNumbers {
|
|||||||
int textLength = 0;
|
int textLength = 0;
|
||||||
if (n.getNodeType() == Node.DOCUMENT_TYPE_NODE) {
|
if (n.getNodeType() == Node.DOCUMENT_TYPE_NODE) {
|
||||||
nextIndex = xmlString.indexOf("<!DOCTYPE", nextIndex);
|
nextIndex = xmlString.indexOf("<!DOCTYPE", nextIndex);
|
||||||
nodeLength = "<!DOCTYPE".length();
|
|
||||||
} else if (n.getNodeType() == Node.COMMENT_NODE) {
|
} else if (n.getNodeType() == Node.COMMENT_NODE) {
|
||||||
nextIndex = xmlString.indexOf("<!--", nextIndex);
|
nextIndex = xmlString.indexOf("<!--", nextIndex);
|
||||||
} else if (n.getNodeType() == Node.ELEMENT_NODE) {
|
} else if (n.getNodeType() == Node.ELEMENT_NODE) {
|
||||||
@@ -67,15 +66,23 @@ class DOMLineNumbers {
|
|||||||
nextIndex = xmlString.indexOf("&" + n.getNodeName() + ";", nextIndex);
|
nextIndex = xmlString.indexOf("&" + n.getNodeName() + ";", nextIndex);
|
||||||
}
|
}
|
||||||
setBeginLocation(n, nextIndex);
|
setBeginLocation(n, nextIndex);
|
||||||
if (n.hasChildNodes()) {
|
|
||||||
// next nodes begin after the current start tag
|
|
||||||
nextIndex += nodeLength;
|
nextIndex += nodeLength;
|
||||||
|
|
||||||
|
if (n.hasChildNodes()) {
|
||||||
NodeList childs = n.getChildNodes();
|
NodeList childs = n.getChildNodes();
|
||||||
for (int i = 0; i < childs.getLength(); i++) {
|
for (int i = 0; i < childs.getLength(); i++) {
|
||||||
nextIndex = determineLocation(childs.item(i), nextIndex);
|
nextIndex = determineLocation(childs.item(i), nextIndex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (n.getNodeType() == Node.ELEMENT_NODE) {
|
|
||||||
|
// autoclosing element, eg <a />
|
||||||
|
boolean isAutoClose = !n.hasChildNodes()
|
||||||
|
&& n.getNodeType() == Node.ELEMENT_NODE
|
||||||
|
// nextIndex is up to the closing > at this point
|
||||||
|
&& xmlString.startsWith("/>", nextIndex - 2);
|
||||||
|
|
||||||
|
if (n.getNodeType() == Node.ELEMENT_NODE && !isAutoClose) {
|
||||||
nextIndex += 2 + n.getNodeName().length() + 1; // </nodename>
|
nextIndex += 2 + n.getNodeName().length() + 1; // </nodename>
|
||||||
} else if (n.getNodeType() == Node.DOCUMENT_TYPE_NODE) {
|
} else if (n.getNodeType() == Node.DOCUMENT_TYPE_NODE) {
|
||||||
Node nextSibling = n.getNextSibling();
|
Node nextSibling = n.getNextSibling();
|
||||||
|
|||||||
Reference in New Issue
Block a user