[ https://issues.apache.org/jira/browse/CONFIGURATION-560?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13825771#comment-13825771 ]
Oliver Heger commented on CONFIGURATION-560: -------------------------------------------- It seems that you ran into a trap here. You created the configuration in the following way: {code} XMLconfig = new XMLConfiguration("/tmp/sample.xml"); XMLconfig.load(); {code} This actually loads the data twice! The constructor already loads the specified file, the following load() operation loads it again constructing a union of the data already available. Thus you end up with duplicate entries. Just remove the additional load() call. This should solve the problem. > Receiving duplicate list entries for XPATH expression on XML document via > org.apache.commons.configuration.HierarchicalConfiguration.configurationsAt > ----------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: CONFIGURATION-560 > URL: https://issues.apache.org/jira/browse/CONFIGURATION-560 > Project: Commons Configuration > Issue Type: Bug > Affects Versions: 1.10 > Reporter: Martin Schlegel > > The XPATH expression used selects only one element, but getList and > configurationsAT retrieves the same element twice ... or I am simply not > getting the manual :-) > Please see the simple example code attached below. > Fedora Linux FC 17 > Java 1.7 > Apache Commons Components used: > commons-collections-3.2.1.jar > commons-configuration-1.10.jar > commons-jxpath-1.3.jar > commons-lang-2.6.jar > commons-logging-1.1.3.jar > XML document "sample.xml": > ____________________________________________ > <?xml version="1.0" encoding="UTF-8"?> > <config> > <names> > <firstname id="1"> Peter </firstname> > <firstname id="2"> Michael </firstname> > <firstname id="3"> Alex </firstname> > </names> > </config> > ____________________________________________ > Java code: > ____________________________________________ > import java.util.List; > import org.apache.commons.configuration.ConfigurationException; > import org.apache.commons.configuration.HierarchicalConfiguration; > import org.apache.commons.configuration.XMLConfiguration; > import org.apache.commons.configuration.tree.xpath.XPathExpressionEngine; > public class xmltest { > public static void main(String[] args) { > > XMLConfiguration XMLconfig; > try { > XMLconfig = new XMLConfiguration("/tmp/sample.xml"); > XMLconfig.load(); > XMLconfig.setExpressionEngine(new > XPathExpressionEngine()); > > System.out.println("Retrieving firstname with id=2 via > configurationsAt() ..."); > List<HierarchicalConfiguration> fields = > XMLconfig.configurationsAt("names/firstname[@id='2']"); > for (HierarchicalConfiguration sub : fields) { > System.out.println("=> names/firstname[@id='2'] > = " + sub.getString(".")); > } > System.out.println("\nRetrieving firstname with id=2 > via getList() ..."); > List<Object> liObjects = > XMLconfig.getList("names/firstname[@id='2']"); > for (Object obj : liObjects) { > System.out.println("=> names/firstname[@id='2'] > = " + (String) obj); > } > > System.out.println("\nRetrieving firstname with id=2 > via getString() ..."); > System.out.println("=> names/firstname[@id='2'] = " + > XMLconfig.getString("names/firstname[@id='2']")); > } > catch (ConfigurationException e) { > e.printStackTrace(); > } > } > } > ____________________________________________ > Output: > ____________________________________________ > Retrieving firstname with id=2 via configurationsAt() ... > => names/firstname[@id='2'] = Michael > => names/firstname[@id='2'] = Michael > Retrieving firstname with id=2 via getList() ... > => names/firstname[@id='2'] = Michael > => names/firstname[@id='2'] = Michael > Retrieving firstname with id=2 via getString() ... > => names/firstname[@id='2'] = Michael > ____________________________________________ -- This message was sent by Atlassian JIRA (v6.1#6144)