2015-01-12 4 views
0

분명히, 당신은 속성을 호출 할 수 있지만, 메서드를 호출하면 심지어 드롭에서 확장하는 클래스에, 아무것도하지 않습니다.DotLiquid 템플릿에서 메서드를 호출 할 수 있습니까?

내 XmlDocumentDrop 클래스에서 이런 일을 할 노력하고있어.

내 DotLiquid 템플릿.

{{ xmlDoc.XPath("//firstName") }} 

아무 것도 반환하지 않습니다.

나는 "캐치 올"방법을 사용하는 것을 시도했다, 그러나 나는 XPath를 통과하기 위해 노력하고있어, 모든 비 단어 문자를 제거하는 것 같다. 그래서 이것을 시도해보십시오 :

{{ xmlDoc.//firstName }} 

"BeforeName"을 BeforeMethod로 보냅니다.

나는 템플릿에서 데이터에 액세스하는 XPath를 사용하여 XML 문서를 템플릿에 노력하고있어. 필자가 필요로하는 모든 XPath에 대한 속성을 만드는 것 (개발자가 개입하지 않아도 사용자가 XML 문서를 템플릿화할 수있게하는 것이 이상적이지는 않음), 내 옵션은 무엇입니까?

나는 필터를 할, 그래서 수있는이 같은 :

{{ xmlDoc|xpath:"//firstName" }} 

그러나 필터는 그때, 문자열로 원시 XML을 전달하고있어 의미 문자열, 취 재 구문 분석이 XML 그것이 불릴 때마다, 그것은 위대하지 않습니다.

옵션?

편집 :

는 나도 사용자 정의 태그를 시도했지만 결국, 난 여전히 문자열과 모든 XML마다 시간을 재 해석으로 XML을 전달하고있다. 필자가 필요로하는 것은 템플릿에있는 XML 문서에 대한 참조와 XPath 문자열을 전달하는 단일 메서드를 호출하는 기능입니다.

+0

흠, 즉 까다로운 하나입니다. 이 상황에서의 일반적인 대답은'BeforeMethod'이지만, 올바른 식별자가 아닌 XPath 쿼리에서는 작동하지 않는다고 지적했습니다. 비록 위대하지는 않지만 필터 만이 유일한 해결책 일 수 있습니다. –

+0

이것이 얼마나 큰 변화인지에 대한 용기가 있습니까? 나는 그것을 위해 포크를 기꺼이 유지할 것입니다. – Deane

+0

나는 Liquid.VariableParser에 들어갔다. 정규식은 xmlDoc.XPath ("// firstName")를 (1) xmlDoc, (2) XPath 및 (3) firstName으로 구문 분석합니다. 모든 변경은 파싱 변수의 핵심 방법을 망쳐 놓아야 할 것입니다. 필자가 도울 수는 없지만 고통스러운 변화라고 생각합니다. – Deane

답변

0

당신은하지 문자열로 해당 xmldoc을 전달할 수 있습니다. 다음과 같은 객체를 허용하는 필터를 작성하기 만하면됩니다.

public static Xpath(object document, string xpath) 
{ 
    var xmlDoc = document as XmlDocumentDrop; 
    return xmlDoc.DocumentElement.SelectSingleNode(xpath).InnerText; 
} 

그런 식으로 다시 구문 분석 할 필요가 없습니다.

관련 문제