显然,您可以调用属性,但调用方法不会做任何事情,即使是从Drop扩展的类。
我试图在我的XmlDocumentDrop类中做这样的事情。
public string XPath
{
return xmlDoc.DocumentElement.SelectSingleNode(xpath).InnerText;
}
然后在我的DotLiquid模板中。
{{ xmlDoc.XPath("//firstName") }}
这不会返回任何内容。
我试过使用" CatchAll"方法,但我试图通过XPath,它似乎剥离所有非单词字符。所以,试着这样做:
{{ xmlDoc.//firstName }}
只需发送" firstName"到BeforeMethod。
我尝试使用XPath模板化XML文档来访问模板中的数据。没有为我可能需要的每个XPath创建属性(不理想,因为想法是让用户模板化XML文档而不必让开发人员参与),我有什么选择?
我可以做一个过滤器,所以像这样:
{{ xmlDoc|xpath:"//firstName" }}
但是过滤器只接受一个字符串,这意味着我将原始XML作为字符串传递,然后在每次调用时重新解析该XML,这并不是很好。
选项?
修改
我也尝试了一个自定义标签,但最后,我仍然将XML作为字符串传递,并且每次都重新解析所有XML。我真正需要的是在我的模板中引用XML文档,以及调用单个方法,传入一串XPath的能力。
答案 0 :(得分:0)
您可以将XMLDoc作为非字符串传递。只需创建一个接受这样的对象的过滤器:
public static Xpath(object document, string xpath)
{
var xmlDoc = document as XmlDocumentDrop;
return xmlDoc.DocumentElement.SelectSingleNode(xpath).InnerText;
}
这样你就不需要重新解析任何东西了。