private void TestRead() { XmlDocument doc; string strFilename = "Books.xml"; bool b = CreateAndLoadXml(out doc, strFilename); if (b) { Element root = new Element(); root.SetDomDoc(doc); Element all = root["All"]; if (all.Exists == false) { Debug.Print("Error: root does not exists!"); return; } Debug.Print("Version : {0}\n", all["Version"].GetInt32(0)); Debug.Print("Books"); Debug.Print("====="); Element books = all["Books"]; if (books.Exists) { List <Element> listBooks = books.GetChildren("Book"); for (int i = 0; i < listBooks.Count; ++i) { Debug.Print("ISBN: {0}", listBooks[i].Attr("ISBN").GetString("Error: None")); Debug.Print("Title: {0}", listBooks[i]["Title"].GetString("Error: No title!")); Debug.Print("Price: {0}", listBooks[i]["Price"].GetFloat(0.0f)); Debug.Print("Desc: {0}", listBooks[i]["Desc"].GetString("Error: None")); Debug.Print("AuthorID: {0}\n", listBooks[i]["AuthorID"].GetInt32(-1)); } } Debug.Print("Authors"); Debug.Print("======="); Element authors = all["Authors"]; if (authors.Exists) { List <Element> listAuthors = authors.GetChildren("Author"); for (int i = 0; i < listAuthors.Count; ++i) { Debug.Print("Name: {0}", listAuthors[i].Attr("Name").GetString("Error: None")); Debug.Print("AuthorID: {0}", listAuthors[i].Attr("AuthorID").GetInt32(-1)); Debug.Print("Bio: {0}\n", listAuthors[i]["Bio"].GetString("Error: No bio!")); } } var vec = HyperElement.JoinOneToMany(authors.GetChildren("Author"), books.GetChildren("Book"), (x, y) => x.Attr("AuthorID").GetString("a") == y["AuthorID"].GetString("a")); for (int i = 0; i < vec.Count; ++i) { Debug.Print("List of books by {0}", vec[i].Key.Attr("Name").GetString("")); Debug.Print("============================================="); for (int j = 0; j < vec[i].Value.Count; ++j) { Debug.Print("{0}", vec[i].Value[j]["Title"].GetString("None")); } Debug.Print(""); } } //DeleteFile(strFilename); }
public void NetHyperElementJoinOneToManyPred() { XmlDocument doc; bool created = CreateAndInitDom(out doc); if (created) { Element root = new Element(); root.SetDomDoc(doc); Element elem1 = root["aa|bb|cc"].CreateNew(null); elem1.SetInt32(11); Element elem2 = root["aa|bb|cc"].CreateNew(null); elem2.SetInt32(22); Element elem3 = root["aa|bb|cc"].CreateNew(null); elem3.SetInt32(33); Element elem4 = root["dd|ee"].CreateNew(null); elem4.Attr("SomeValue").SetInt32(11); Element elem5 = root["dd|ee"].CreateNew(null); elem5.Attr("SomeValue").SetInt32(22); Element elem6 = root["dd|ee"].CreateNew(null); elem6.Attr("SomeValue").SetInt32(33); Element elem7 = root["dd|ee"].CreateNew(null); elem7.Attr("SomeValue").SetInt32(11); Element elem8 = root["dd|ee"].CreateNew(null); elem8.Attr("SomeValue").SetInt32(22); Element elem9 = root["dd|ee"].CreateNew(null); elem9.Attr("SomeValue").SetInt32(33); Element elem10 = root["dd|ee"].CreateNew(null); elem10.Attr("SomeValue").SetInt32(11); Element elem11 = root["dd|ee"].CreateNew(null); elem11.Attr("SomeValue").SetInt32(22); Element elem12 = root["dd|ee"].CreateNew(null); elem12.Attr("SomeValue").SetInt32(33); List <KeyValuePair <Elmax.Element, List <Elmax.Element> > > vec = HyperElement.JoinOneToMany( elem1.AsCollection(), elem4.AsCollection(), (x, y) => x.GetInt32(0) == y.Attr("SomeValue").GetInt32(1)); Assert.AreEqual(vec.Count, 3); for (int i = 0; i < vec.Count; ++i) { Assert.AreEqual(vec[i].Value.Count, 3); } XmlDocument doc2; Assert.IsTrue(CreateAndLoadXmlString(out doc2, doc.OuterXml)); Element root2 = new Element(); root2.SetDomDoc(doc2); List <KeyValuePair <Elmax.Element, List <Elmax.Element> > > vec2 = HyperElement.JoinOneToMany( root2["aa|bb|cc"].AsCollection(), root2["dd|ee"].AsCollection(), (x, y) => x.GetInt32(0) == y.Attr("SomeValue").GetInt32(1)); Assert.AreEqual(vec2.Count, 3); for (int i = 0; i < vec2.Count; ++i) { Assert.AreEqual(vec2[i].Value.Count, 3); } } }