You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ms...@apache.org on 2016/08/25 05:15:25 UTC
svn commit: r1757604 -
/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
Author: msahyoun
Date: Thu Aug 25 05:15:25 2016
New Revision: 1757604
URL: http://svn.apache.org/viewvc?rev=1757604&view=rev
Log:
PDFBOX-3471: ensure that all nodes are visited when removing; ignore comments
Modified:
pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
Modified: pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java?rev=1757604&r1=1757603&r2=1757604&view=diff
==============================================================================
--- pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java (original)
+++ pdfbox/trunk/xmpbox/src/main/java/org/apache/xmpbox/xml/DomXmpParser.java Thu Aug 25 05:15:25 2016
@@ -789,25 +789,32 @@ public class DomXmpParser
*/
private void removeComments(Node root)
{
- if (root.getChildNodes().getLength()<=1)
+ // will hold the nodes which are to be deleted
+ List<Node> forDeletion = new ArrayList<Node>();
+
+ NodeList nl = root.getChildNodes();
+
+ if (nl.getLength()<=1)
{
// There is only one node so we do not remove it
return;
}
- NodeList nl = root.getChildNodes();
- for (int i=0; i < nl.getLength(); i++)
+
+ for (int i = 0; i < nl.getLength(); i++)
{
Node node = nl.item(i);
if (node instanceof Comment)
{
- // remove the comment
- root.removeChild(node);
+ // comments to be deleted
+ forDeletion.add(node);
}
else if (node instanceof Text)
{
if (node.getTextContent().trim().isEmpty())
{
- root.removeChild(node);
+ // TODO: verify why this is necessary
+ // empty text nodes to be deleted
+ forDeletion.add(node);
}
}
else if (node instanceof Element)
@@ -816,6 +823,12 @@ public class DomXmpParser
removeComments(node);
} // else do nothing
}
+
+ // now remove the child nodes
+ for (Node node : forDeletion)
+ {
+ root.removeChild(node);
+ }
}
private AbstractStructuredType instanciateStructured(TypeMapping tm, Types type, String name,