Ясно, что вы можете вызывать свойства, но вызов метода ничего не делает, даже для класса, унаследованного от Drop.
Я пытаюсь сделать что-то подобное в своем классе XmlDocumentDrop.
public string XPath
{
return xmlDoc.DocumentElement.SelectSingleNode(xpath).InnerText;
}
Затем в моем шаблоне DotLiquid.
{{ xmlDoc.XPath("//firstName") }}
Это ничего не возвращает.
Я пытался использовать метод "CatchAll", но я пытаюсь передать XPath, и он, похоже, удаляет все несловные символы. Итак, пытаясь сделать это:
{{ xmlDoc.//firstName }}
Просто отправляет "firstName" в BeforeMethod.
Я пытаюсь создать шаблон XML-документа, используя XPath для доступа к данным из шаблона. За исключением создания свойств для каждого XPath, который мне может понадобиться (не идеально, так как идея состоит в том, чтобы позволить пользователям создавать шаблоны XML-документа без необходимости привлечения разработчика), какие у меня есть варианты?
Я мог бы сделать фильтр, так что-то вроде этого:
{{ xmlDoc|xpath:"//firstName" }}
Но фильтр принимает только строку, что означает, что я передаю необработанный XML как строку, а затем повторно анализирую этот XML каждый раз, когда он вызывается, что не очень хорошо.
Опции?
Изменить:
Я тоже попробовал пользовательский тег, но, в конце концов, я все еще передаю XML в виде строки и каждый раз повторно анализирую весь XML. Что мне действительно нужно, так это ссылка на XML-документ в моем шаблоне и возможность вызывать единственный метод, передавая строку XPath.
BeforeMethod
, но, как вы указали, это не будет работать для запросов XPath, которые не являются допустимыми идентификаторами. Фильтр может быть единственным решением, хотя это и не очень хорошо. - person Tim Jones   schedule 13.01.2015