Fix for output of e4X namespace-based child and descendant queries
diff --git a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index cc0a892..28a60cf 100644
--- a/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/royale/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -95,30 +95,38 @@
         							rightNode.getNodeID() != ASTNodeID.Op_AtID &&
         							!((rightNode.getNodeID() == ASTNodeID.ArrayIndexExpressionID) && 
         									(((DynamicAccessNode)rightNode).getLeftOperandNode().getNodeID() == ASTNodeID.Op_AtID));
-        		if (descendant || child)
-	        	{
-	        		writeLeftSide(node, leftNode, rightNode);
-	        		if (descendant)
-	        			write(".descendants('");
-	        		if (child)
-	        			write(".child('");	        			
-	        		String s = fjs.stringifyNode(rightNode);
-	        		int dot = s.indexOf('.');
-	        		if (dot != -1)
-	        		{
-	        			String name = s.substring(0, dot);
-	        			String afterDot = s.substring(dot);
-	        			write(name);
-	        			write("')");
-	        			write(afterDot);
-	        		}
-	        		else
-	        		{
-	        			write(s);
-	        			write("')");
-	        		}
-	        		return;
-	        	}
+        		if (descendant || child) {
+					writeLeftSide(node, leftNode, rightNode);
+					if (descendant)
+						write(".descendants(");
+					if (child)
+						write(".child(");
+					String closeMethodCall = "')";
+					String s = "";
+					if (rightNode instanceof INamespaceAccessExpressionNode) {
+						//use a QName to support the namespace access
+						write("new QName(");
+						NamespaceIdentifierNode namespaceIdentifierNode = (NamespaceIdentifierNode) ((INamespaceAccessExpressionNode) rightNode).getLeftOperandNode();
+						s = fjs.stringifyNode(namespaceIdentifierNode);
+						write(s + ", '");
+						rightNode = ((INamespaceAccessExpressionNode) rightNode).getRightOperandNode();
+						closeMethodCall = "'))";
+					} else write("'"); //normal string name for child
+			
+					s = fjs.stringifyNode(rightNode);
+					int dot = s.indexOf('.');
+					if (dot != -1) {
+						String name = s.substring(0, dot);
+						String afterDot = s.substring(dot);
+						write(name);
+						write(closeMethodCall);
+						write(afterDot);
+					} else {
+						write(s);
+						write(closeMethodCall);
+					}
+					return;
+				}
         	}
         	else if (isProxy)
         	{