Рекурсивно выбрать дочерний узел с использованием XPath рекурсивно? - PullRequest
0 голосов
/ 22 ноября 2011

С учетом следующего XML:

<Checks>
   <IsSomethingCheck Param="1"/>
   <IsSomeoneCheck Param2="2"/>
   <Checks Operator="Or">
       <IsAnythingCheck Param3="3"/>
   </Checks>
</Checks>

Как бы я рекурсивно проходил по дочерним элементам Checks?

Приведенный ниже код работает для самых внешних дочерних элементов, но останавливает обработку большинства внутреннихchildren (Часть внутреннего Checks элемента)

protected override void InitializePlugin(XmlElement xmlElement)
{
    Enum.TryParse(xmlElement.GetAttribute("Operator"), out _operator);

    XPathNodeIterator nav = xmlElement.CreateNavigator().Select("Checks/*");

    foreach (XPathNavigator checkNode in nav)
    {
        if (_checksLookup.ContainsKey(checkNode.Name))
        {
            Type checkType = _checksLookup[checkNode.Name];
            Check check = Activator.CreateInstance(checkType) as Check;
            check.Initialize(checkNode.OuterXml);
            Checks.Add(check);
        }
    }    
}

PS: XmlElement этого метода ожидает, что он получит весь раздел Checks XML.

1 Ответ

2 голосов
/ 22 ноября 2011

Нашли это! Выражение XPath должно быть /CheckManager/*, а не CheckManager/*.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...