2010-11-29 8 views
0

Ich versuche, eine Liste von Tags aus einer bestimmten Tag-Gruppe in Umbraco (v4.0.2.1) mit dem folgenden Code zu erhalten:Iterate über Umbraco getAllTagsInGroup Ergebnis

var tags = umbraco.editorControls.tags.library.getAllTagsInGroup("document downloads"); 

Was ich tun möchte, ist gib einfach eine Liste dieser Tags aus. Wenn ich jedoch die Variable 'Tags' ausgabe, gibt es nur eine Liste aller Tags in einer Zeichenfolge aus. Ich möchte jedes Tag auf eine neue Zeile aufteilen.

Wenn ich den Datentyp der 'Tags' Variablen überprüfen:

string tagType = tags.GetType().ToString(); 

... es gibt MS.Internal.Xml.XPath.XPathSelectionIterator.

Also Frage ist, wie bekomme ich die einzelnen Tags aus der 'Variablen' Variable? Wie arbeite ich mit einer Variablen dieses Datentyps? Ich kann Beispiele dafür finden, wie man das tut, indem ich eine tatsächliche XML-Datei lade, aber ich habe keine eigentliche XML-Datei - nur die Variable 'Tags', mit der ich arbeiten kann.

Vielen Dank für jede Hilfe!

EDIT1: Ich denke, was ich frage ist, wie ich die durch einen XPathSelectionIterator-Datentyp zurückgegebenen Knoten durchlaufen?

EDIT2: Ich habe diesen Code gefunden, die fast das tut, was ich brauche:

 XPathDocument document = new XPathDocument("file.xml"); 
     XPathNavigator navigator = document.CreateNavigator(); 

     XPathNodeIterator nodes = navigator.Select("/tags/tag"); 
     nodes.MoveNext(); 
     XPathNavigator nodesNavigator = nodes.Current; 

     XPathNodeIterator nodesText = nodesNavigator.SelectDescendants(XPathNodeType.Text, false); 

     while (nodesText.MoveNext()) 
      debugString += nodesText.Current.Value.ToString(); 

... aber es erwartet, dass die URL einer aktuellen XML-Datei in der ersten Zeile zu laden. Meine XML-Datei ist im Wesentlichen die Variable "Tags", keine tatsächliche XML-Datei. Also, wenn ich ersetzen:

XPathDocument document = new XPathDocument("file.xml"); 

... mit:

XPathDocument document = new XPathDocument(tags); 

... es nur Fehler.

Antwort

2

Da es ein Iterator ist, würde ich vorschlagen, dass Sie es iterieren. ;-)

var tags = umbraco.editorControls.tags.library.getAllTagsInGroup("document downloads"); 

foreach (XPathNavigator tag in tags) { 
    // handle current tag 
} 
+0

Dank Tomalak. Ich habe folgendes versucht: \t \t \t var tags = umbraco.editorControls.tags.library.getAllTagsInGroup ("Dokumentdownloads"); \t \t \t foreach (XPathNavigator Tag in Tags) \t \t \t { \t \t \t \t debugString + = tag.ToString() + "
"; \t \t \t} Aber es gibt nur alle Tags als einzelne Zeichenfolge - es ist nicht durch jeden zu durchlaufen scheint, wie es sollte. – Dan

+0

Obwohl ich keine Möglichkeit finde, den vollständigen XML-Code für die Variable 'Tags' auszugeben, habe ich die Dokumentation zur 'getAllTagsInGroup' -Methode gefunden, die besagt, dass sie die gefundenen Knoten als: Tagname etc ... ". Vermutlich muss ich also sagen, dass ich nur die "Tag" -Knoten durchlaufen muss. Ich denke, derzeit muss es den vollständigen "Tag" -Knoten und nicht jeden Tag-Knoten einzeln zurückgeben. – Dan

+0

@Dan: Sie haben bereits einen Weg gefunden, bestimmte Nachkommenknoten auszuwählen. Alles, was Sie tun müssen, ist ein wenig Zeit im Debugger zu verbringen und dieses Wissen auf die Situation anzuwenden. ;-) – Tomalak

0

Ich denke, das macht den Trick ein wenig besser.

Das Problem ist, dass getAllTagsInGroup den Container für alle Tags zurückgibt, müssen Sie seine untergeordneten Elemente abrufen.

foreach(var tag in umbraco.editorControls.tags.library.getAllTagsInGroup("category").Current.Select("/tags/tag")) 
{ 
    /// Your Code 
}