Solution:
Thanks! At the end I follow the advice of VUnreal and KmgKrishnan, I insert the xml data from the url in a xmlDocument and after I load this xml on a XElement in the join as I was doing before from local paths. It Works :) .
string m_strFilePath = "http://www.XXX.com/XX/XX/getAllPackages";
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load(m_strFilePath);
var query = (from bl in XElement.Load(@"C:\xx\doc1.xml").Elements("line_item_data").GroupBy(i1 =>
i1.Element("line_item").Value).Select(i1 => i1.First())
join g in XElement.Load(new XmlNodeReader(myXmlDocument)).Elements("productVersionDetails").GroupBy(i1 =>
i1.Element("product").Value).Select(i1 => i1.First())
on (string)bl.Element("line_item").Value equals (string)g.Element("product").Value
where ((string)g.Element("type")).Equals("MSD")
select new XElement("product_item",
new XElement("version_id", (string)g.Element("version_id")),
new XElement("technology_process",(string)bl.Element("technology_process")),
new XElement("product", (string)g.Element("product")),
new XElement("version", (string)g.Element("version")),
new XElement("status", (string)g.Element("status")),
new XElement("owner_name", (string)bl.Element("owner_name")),
new XElement("description", (string)g.Element("description")),
new XElement("os", (string)g.Element("os"))
)).ToList();
var doc = new XElement("ArrayOfProductVersionDetails", query);
doc.Save(@"C:\xxx\xx\XML_Merged.xml");
Console.WriteLine("XML merged and file saved.");