[159168] [expressions] Expression support for any XML format
diff --git a/bundles/org.eclipse.core.expressions/src/org/eclipse/core/internal/expressions/EqualsExpression.java b/bundles/org.eclipse.core.expressions/src/org/eclipse/core/internal/expressions/EqualsExpression.java
index f97c312..04abcad 100644
--- a/bundles/org.eclipse.core.expressions/src/org/eclipse/core/internal/expressions/EqualsExpression.java
+++ b/bundles/org.eclipse.core.expressions/src/org/eclipse/core/internal/expressions/EqualsExpression.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.core.internal.expressions;
 
+import org.w3c.dom.Element;
+
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IConfigurationElement;
@@ -37,7 +39,13 @@
 		Expressions.checkAttribute(ATT_VALUE, value);
 		fExpectedValue= Expressions.convertArgument(value);
 	}
-	
+
+	public EqualsExpression(Element element) throws CoreException {
+		String value= element.getAttribute(ATT_VALUE);
+		Expressions.checkAttribute(ATT_VALUE, value.length() > 0 ? value : null);
+		fExpectedValue= Expressions.convertArgument(value);
+	}
+
 	public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
 		Object element= context.getDefaultVariable();
 		return EvaluationResult.valueOf(element.equals(fExpectedValue));
diff --git a/tests/org.eclipse.core.expressions.tests/src/org/eclipse/core/internal/expressions/tests/ExpressionTests.java b/tests/org.eclipse.core.expressions.tests/src/org/eclipse/core/internal/expressions/tests/ExpressionTests.java
index e982a39..284341d 100644
--- a/tests/org.eclipse.core.expressions.tests/src/org/eclipse/core/internal/expressions/tests/ExpressionTests.java
+++ b/tests/org.eclipse.core.expressions.tests/src/org/eclipse/core/internal/expressions/tests/ExpressionTests.java
@@ -10,9 +10,13 @@
  *******************************************************************************/
 package org.eclipse.core.internal.expressions.tests;
 
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
@@ -44,6 +48,10 @@
 import org.eclipse.core.internal.expressions.TestExpression;
 import org.eclipse.core.internal.expressions.WithExpression;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
 
 public class ExpressionTests extends TestCase {
 
@@ -652,7 +660,27 @@
 		Expression exp= ExpressionConverter.getDefault().perform(enable);
 		ref(exp);
 	}
-	
+
+	public void testReadDOMExpression() throws Exception {
+		IExtensionRegistry registry= Platform.getExtensionRegistry();
+		IConfigurationElement[] ces= registry.getConfigurationElementsFor("org.eclipse.core.expressions.tests", "testParticipants"); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		DocumentBuilder builder= DocumentBuilderFactory.newInstance().newDocumentBuilder();
+		URL url= ExpressionTestPlugin.getDefault().getBundle().getEntry("plugin.xml");
+		Document document= builder.parse(url.openStream());
+		NodeList testParticipants= document.getElementsByTagName("testParticipant");
+		for (int i= 0; i < testParticipants.getLength(); i++) {
+			Element elem= (Element)testParticipants.item(i);
+			String id = elem.getAttribute("id");
+			Element enable1= (Element)elem.getElementsByTagName("enablement").item(0);
+			IConfigurationElement enable2= findExtension(ces, id).getChildren("enablement")[0]; //$NON-NLS-1$
+			
+			Expression exp1= ExpressionConverter.getDefault().perform(enable1);
+			Expression exp2= ExpressionConverter.getDefault().perform(enable2);
+			assertEquals(exp1, exp2);
+		}
+	}
+
 	public void testForcePluginActivation() throws Exception {
 		IExtensionRegistry registry= Platform.getExtensionRegistry();
 		IConfigurationElement[] ces= registry.getConfigurationElementsFor("org.eclipse.core.expressions.tests", "testParticipants"); //$NON-NLS-1$ //$NON-NLS-2$