Можно ли вызвать метод из шаблона DotLiquid?
Ясно, что вы можете вызывать свойства, но вызов метода ничего не делает, даже для класса, который выходит из 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.
1 ответ
Вы можете передать XMLDoc как не строку. Просто создайте фильтр, который принимает объект следующим образом:
public static Xpath(object document, string xpath)
{
var xmlDoc = document as XmlDocumentDrop;
return xmlDoc.DocumentElement.SelectSingleNode(xpath).InnerText;
}
Таким образом, вам не нужно ничего анализировать.