Можно ли вызвать метод из шаблона 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;
}

Таким образом, вам не нужно ничего анализировать.

Другие вопросы по тегам