使用Umbraco 4.6+,有沒有辦法在C#中檢索特定doctype的所有節點?我一直在尋找umbraco.NodeFactory
命名空間,但還沒有發現任何有用的東西。Umbraco 4.6+ - 如何通過C#中的doctype獲取所有節點?
17
A
回答
16
我今天剛剛這樣做,像下面的代碼應該工作(使用umbraco.presentation.nodeFactory),調用它的nodeId爲-1以獲得網站的根節點,讓它工作的方式下來:
private void DoSomethingWithAllNodesByType(int NodeId, string typeName)
{
var node = new Node(nodeId);
foreach (Node childNode in node.Children)
{
var child = childNode;
if (child.NodeTypeAlias == typeName)
{
//Do something
}
if (child.Children.Count > 0)
GetAllNodesByType(child, typeName);
}
}
3
或者遞歸的方法:
using umbraco.NodeFactory;
private static List<Node> FindChildren(Node currentNode, Func<Node, bool> predicate)
{
List<Node> result = new List<Node>();
var nodes = currentNode
.Children
.OfType<Node>()
.Where(predicate);
if (nodes.Count() != 0)
result.AddRange(nodes);
foreach (var child in currentNode.Children.OfType<Node>())
{
nodes = FindChildren(child, predicate);
if (nodes.Count() != 0)
result.AddRange(nodes);
}
return result;
}
void Example()
{
var nodes = FindChildren(new Node(-1), t => t.NodeTypeAlias.Equals("myDocType"));
// Do something...
}
15
假如你最終只需要幾個特定類型的節點,這將是更有效地使用yield關鍵字,以避免超過您獲取更多必須:
public static IEnumerable<INode> GetDescendants(this INode node)
{
foreach (INode child in node.ChildrenAsList)
{
yield return child;
foreach (INode grandChild in child.GetDescendants())
{
yield return grandChild;
}
}
yield break;
}
因此,最終的調用來獲取按類型節點將是:
new Node(-1).GetDescendants().Where(x => x.NodeTypeAlias == "myNodeType")
所以,如果你只是想獲得第5名,您可以添加。取(5)到最後,你會只通過前5個結果遞歸而不是拉出整棵樹。
1
如果你只是建立一個剃鬚刀腳本文件,由宏(一把umbraco 4.7+)被使用,我發現這個速記特別有用...
var nodes = new Node(-1).Descendants("DocType").Where("Visible");
希望這有助於有人!
1
在一把umbraco 7.0或更高版本,你可以做這樣的
foreach (var childNode in node.Children<ChildNodeType>())
{
...
}
相關問題
- 1. Umbraco 4.6:通過版本獲取節點
- 2. umbraco - 如何通過文檔類型獲取所有節點
- 3. 從Umbraco的子節點獲取所有根節點的列表
- 4. Umbraco如何通過使用umbraco API發佈所有未發佈的子節點
- 5. Umbraco 7 + Razor:如何通過ID獲取文檔/節點?
- 6. 如何獲取PowerShell中的子節點的所有父節點
- 7. 如何獲取fancytree中節點的所有子節點?
- 8. 如何獲取JSON類中所有子節點的值C#
- 9. Umbraco 7 marco腳本,通過編號獲取節點失敗
- 10. Umbraco,通過名稱和數據類型獲取節點
- 11. Umbraco - 以編程方式通過ID獲取節點
- 12. 通過c#獲取xml節點屬性
- 13. 如何通過id獲取節點?
- 14. Neo4jClient C#如何獲得所有節點
- 15. 如何獲取所有子節點值
- 16. 獲取所有節點
- 17. Umbraco獲取錯誤的當前節點?
- 18. 如何從javascript中的節點標識獲取Umbraco節點路徑?
- 19. 如何通過引用節點值來獲取節點值
- 20. 如何搜索umbraco的所有節點和所有屬性中的關鍵字
- 21. C#,XML如何通過獲取與XMLNode.SelectSingleNode XML節點週期
- 22. 如何通過C#中的屬性名稱獲取XML節點過濾值?
- 23. 如何從wxpython中的CT.CustomTreeCtrl中獲取所有節點
- 24. 如何通過javafx中的fx:id獲取對節點的引用?
- 25. 如何只獲取xml中的根節點的節點在c#
- 26. 如何獲取jtree中所有的根節點的孩子?
- 27. 如何通過Jstree中的ID獲取節點
- 28. 如何通過db2中的遞歸查詢獲取葉節點?
- 29. 如何獲取具有某個屬性的節點的所有子節點?
- 30. 如何使用SQL和XQuery獲取根節點中所有節點的內容?
使用-1作爲ID來獲得網站的根節點是一個偉大的小費!感謝那 – ComethTheNerd 2012-12-12 10:41:54