迭代Umbraco getAllTagsInGroup结果

时间:2010-11-29 14:52:39

标签: xpath umbraco asp.net-3.5 umbraco-tags

我正在尝试使用以下代码从Umbraco(v4.0.2.1)中的特定标签组获取标签列表:

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

我想要做的只是输出这些标签的列表。但是,如果我输出变量'tags',它只输出字符串中所有标签的列表。我想将每个标签拆分成一个新行。

当我检查'tags'变量的数据类型时:

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

...输出MS.Internal.Xml.XPath.XPathSelectionIterator

所以问题是,如何从'tags'变量中获取单个标签?如何使用此数据类型的变量?我可以通过加载实际的XML文件找到如何实现它的示例,但我没有实际的XML文件 - 只需要使用'tags'变量。

非常感谢您的帮助!

EDIT1 :我想我要问的是,如何循环XPathSelectionIterator数据类型返回的节点?

EDIT2 :我发现这个代码几乎可以满足我的需求:

        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();

...但它希望将实际XML文件的URL加载到第一行。我的XML文件本质上是'tags'变量,而不是实际的XML文件。所以当我替换:

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

...与:

XPathDocument document = new XPathDocument(tags);

......只是错误。

2 个答案:

答案 0 :(得分:2)

因为它是迭代器,我建议你迭代它。 ; - )

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

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

答案 1 :(得分:0)

我认为这样做的好一点。

问题是getAllTagsInGroup返回所有标签的容器,你需要得到它的子节点。

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