Reading XML - InfoPath Dev
in

InfoPath Dev

Reading XML

Last post 06-22-2010 11:08 PM by azhilenko. 2 replies.
Page 1 of 1 (3 items)
Sort Posts: Previous Next
  • 06-22-2010 10:24 PM

    • azhilenko
    • Not Ranked
      Male
    • Joined on 10-09-2009
    • Kazakstan
    • Posts 9

    Reading XML

    Hello!

    I bumped into problem then i tried to read data of the form...

    During load event i fill repeating group that is:

     <my:gSecurityGroup>
      <my:gSecurityMember>
       <my:sAMAccountName>Evgenii.Goncharov</my:sAMAccountName>
       <my:displayName>Evgenii Goncharov</my:displayName>
       <my:mail>[email protected]</my:mail>
      </my:gSecurityMember>
     <my:gSecurityMember>
       <my:sAMAccountName>Leny.Kravits</my:sAMAccountName>
       <my:displayName>Leny Kravits</my:displayName>
       <my:mail>[email protected]</my:mail>
      </my:gSecurityMember><my:gSecurityMember>
       <my:sAMAccountName>Kairat.Sarsebayev</my:sAMAccountName>
       <my:displayName>Kairat Sarsebayev</my:displayName>
       <my:mail>[email protected]</my:mail>
      </my:gSecurityMember><my:gSecurityMember>
       <my:sAMAccountName>Evgenii.Goncharov</my:sAMAccountName>
       <my:displayName>Evgenii Goncharov</my:displayName>
       <my:mail>[email protected]</my:mail>
      </my:gSecurityMember></my:gSecurityGroup>

    The  part of code that does it is below (de - is a result of AD DirectorySearcher.FindOne() with specified filter):

                            XPathNavigator SecGroup = FormNavigator.SelectSingleNode("/my:mySpace/my:gSecurityGroup", NamespaceManager);
                            XPathNavigator NewNode;
                            foreach (object obj in de.Properties["Member"])
                            {
                                de1.Path = "LDAP://" + obj.ToString();
                                NewNode = SecGroup.SelectSingleNode("/my:mySpace/my:gSecurityGroup/my:gSecurityMember", NamespaceManager).Clone();
                                NewNode.SelectSingleNode("//my:gSecurityMember/my:sAMAccountName", NamespaceManager).SetValue(de1.Properties["sAMAccountName"].Value.ToString());
                                NewNode.SelectSingleNode("//my:gSecurityMember/my:displayName", NamespaceManager).SetValue(de1.Properties["displayName"].Value.ToString());
                                NewNode.SelectSingleNode("//my:gSecurityMember/my:mail", NamespaceManager).SetValue(de1.Properties["mail"].Value.ToString());
                                SecGroup.AppendChild(NewNode);
                            }

    Then other events occur i need to read data from it by field and, for instance, to compare it with variables.

    How to access them.

    I try to perfom it next way:

            public void cbExecutor_Changed(object sender, XmlEventArgs e)
            {
                XPathNavigator FN = this.MainDataSource.CreateNavigator();
                XPathNodeIterator SecIter = SecGroup.Select("/my:mySpace/my:gSecurityGroup/my:gSecurityMember", NamespaceManager);
                string sExecutor = FN.SelectSingleNode("/my:mySpace/my:grApprovers/my:grSignSecurityManager/my:grSecurityManager/my:cbExecutor", NamespaceManager).Value;
                while (SecIter.MoveNext())
                {
                    if (SecIter.Current.Value.Contains(sExecutor))
                    {
                        FN.SelectSingleNode("/my:mySpace/my:grApprovers/my:grSignSecurityManager/my:grSecurityManager/my:fExecutorEmail", NamespaceManager).SetValue(SecIter.Current.SelectSingleNode("//my:mail", NamespaceManager).Value);
                    }
                }

    Then i was debugging the code above i noticed that SecIter.Current.Value was changing during iteration but SecIter.Current.SelectSingleNode("//my:mail", NamespaceManager).Value was always the same and correlated to the first entry.

    I also tried to point to my:mail tag like this

    SecIter.Current.SelectSingleNode("//my:gSecurityMember/my:mail", NamespaceManager).Value

    but without any value.

    Could somebody point me where i am wrong.

    Thank You.

  • 06-22-2010 10:46 PM In reply to

    You need to use a relative XPath, relative my:gSecurityMember.  both //my:mail and //my:gSecurityMember/my:mail are absolute paths and will always select the first my:mail node in the document.

    Jimmy Rishe / Software Developer / Microsoft MVP
    Qdabra Software
  • 06-22-2010 11:08 PM In reply to

    • azhilenko
    • Not Ranked
      Male
    • Joined on 10-09-2009
    • Kazakstan
    • Posts 9

    Thank you for Your reply.

    I tried in different ways, and supposed that the it concerns the paths, but i didn't get right syntax.

    Now i have that i need.

Page 1 of 1 (3 items)
Copyright © 2003-2019 Qdabra Software. All rights reserved.
View our Terms of Use.