2 Stimmen

Vbscript Auswahl von Kindknoten

Ich habe das folgende XML, gXML, das von einer Seite an eine andere Seite weitergeleitet wird, die eine E-Mail sendet.

Ich möchte in der Lage sein, eine E-Mail an jede Zeile zu senden, ich möchte, dass es so aussieht:

for (jede Zeile){
    blah blah blah (sende E-Mail Funktion)
}

Wie wähle ich Zeilen in XML aus.

2voto

Daniel Hollinrake Punkte 1758

Wenn Sie VBScript verwenden, gehe ich davon aus, dass Sie Zugriff auf System.Xml haben.

Schauen Sie sich diese Seite an: http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.childnodes.aspx

Stöbern Sie auch ein wenig auf Google herum, insbesondere bei der Verwendung von System.Xml.XPath. Es gibt viele Beispiele da draußen.

Dies ist eine Testmethode, die ich in einer Konsolen-App geschrieben habe, die ich zum Testen verwende. Sie ist in C# geschrieben, aber die Idee sollte helfen:

    private static void ExtractUserNodeFromUsersXml()
    {
        XmlDocument xmlDoc = new XmlDocument();

        string xml = @"

";

        xmlDoc.LoadXml(xml);

        string userid = "38";

        XPathNavigator nav = xmlDoc.CreateNavigator();

        XPathNodeIterator userNodes = nav.Select("data/users/user[@id='" + userGuid + "']");

        while (userNodes.MoveNext())
        {
            if (userNodes.Current is IHasXmlNode)
            {
                XmlNode node = ((IHasXmlNode)userNodes.Current).GetNode();

                if (node != null)
                {
                    string culture = node.Attributes.GetNamedItem("culture").Value;

                    Console.WriteLine(node.OuterXml);
                    Console.WriteLine("Culture is " + culture);
                }
            }
        }

        Console.WriteLine();
        Console.WriteLine("******");
        Console.WriteLine();

        Console.WriteLine(xmlDoc.OuterXml);
    }

Es mag etwas übertrieben sein für das, was Sie benötigen, aber wenn Sie online nachsehen und diesen Code zum Experimentieren verwenden, wird es Ihnen helfen. Tatsächlich werde ich jetzt diese Methode für Ihr XML ändern.

Ändern Sie den XPathNavigator so, dass er mit Ihrem XML lautet.

XPathNodeIterator emailNodes = nav.Select("root/Lease/row");

Stellen Sie sicher, dass Ihr XML gültig ist und denken Sie daran, dass der 'xpath' Groß- und Kleinschreibung beachtet.

2voto

Ekkehard.Horner Punkte 37887

Die VBScript-Version (am besten mit den Docs griffbereit):

  ' Annahme, Sie haben einen String in gXML, ich fälsche es hier, bitte
  ' beachten Sie das Schließen der Reihenknoten!
  Dim gXML : gXML = Join(Array( _
       "" _
     , " " _
     , "  " _
     , "  " _
     , "  " _
     , "  " _
     , " " _
     , "" _
  ), "")
  Dim oXML : Set oXML = CreateObject("Msxml2.DOMDocument")
  oXML.loadXml gXML
  If 0 = oXML.ParseError Then
     Dim ndlRow : Set ndlRow = oXML.selectNodes("/root/Lease/row")
     If 0 < ndlRow.length Then
        Dim nRow
        For nRow = 0 To (ndlRow.length - 1)
            WScript.Echo nRow, "send mail to", ndlRow(nRow).getAttribute("hello")
        Next
     Else
        WScript.Echo "keine Zeilen gefunden"
     End If
  Else
     WScript.Echo oXML.parseError.reason
  End If

Ausgabe:

0 send mail to none@nowhere.com
1 send mail to none@nowhere.com
2 send mail to none@nowhere.com
3 send mail to none@nowhere.com

Anstelle der gezählten Schleife

For nRow = 0 To (ndlRow.length - 1)
    WScript.Echo nRow, "send mail to", ndlRow(nRow).getAttribute("hello")
Next

können Sie eine For Each-Schleife verwenden:

Dim ndRow
For Each ndRow In ndlRow
    WScript.Echo "send mail to", ndRow.getAttribute("hello")
Next

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X