Re: Generic template question
Kirill <[email protected]>
| Newsgroups | gmane.comp.web.freemarker.user |
|---|---|
| Message-ID | <[email protected]> |
Hi Daniel,
Thanks for your input. I tried that and got no luck...
So, given the sample XML:
<root>
<item attr1="123" attr2="345">itemText</item>
</root>
and taking into consideration scenario, that we don't know for sure how many
<item>'s are there, and attributes in each item as well - what the template
has to look like?
This is what I got so far:
<#ftl>
<#recurse doc>
<#macro @element>
<#if .node?children?has_content>
${.node.@@start_tag}
</#if>
<#if !.node?children?has_content>
<${.node?node_name}/>
</#if>
<#if .node?children?size = 1>
${r"${"}${.node?parent?node_name}.${.node?node_name}${r"}"}
</#if>
<#if .node?children?size > 0>
<#recurse>
</#if>
<#if .node?children?has_content>
${.node.@@end_tag}
</#if>
</#macro>
Can I just specify a macro for all attributes?
Something like:
<#macro @attrName>
<#list @element["@*"] as attributes>
${attributes?node_name}
</#list>
</#macro>
(Also, that <#if> test you mentioned redundant has to be there, otherwise
there is no recursion to child nodes, for some reason...).
Thanks again,
Kirill
On Thu, Feb 19, 2009 at 2:29 AM, fm <[email protected]> wrote:
> Hello Kirill,
>
> Thursday, February 19, 2009, 5:14:32 AM, you wrote:
>
> [snip]
> > <#macro @element>
> > ${.node.@@start_tag}
> > <#if .node?children?size = 1>
> > ${r"${"}${.node.@@qname}${r"}"}
> > </#if>
> > <#if .node?children?size > 0>
> > <#recurse>
> > </#if>
> [snip]
>
> (I suppose #recurse just does nothing if there are no children, so
> that #if is redundant there.)
>
> [snip]
> > The question is - how do I get to the bound namespaces and attributes?
>
> whateverNode?node_namespace
>
> > For example, if I get a tag like: <root attribute="value"/>, how do I
> > get to "attribute" and its' "value"?
>
> If you know the attribute name, you write someElement.@someAttName.
> If you don't know the attribute names you can list them with
> someElement["@*"] (or someElement.@@ -- same thing, just not
> immediately obvious for those who know XPath). Then if you have the
> attribute name in variable, you can write someElement["@" + attName].
>
> > Or, if I get a tag like <root xmlns:namespace="HTTP://foo"/>, how do I
> > retrieve the "xmlns:namespace" part (and its' value)?
>
> You don't usually. Unfortunately (as far as I know...) the XML infoset
> W3C rec. doesn't state that xmlns attributes are not part of the
> infoset, but for practical purposes they are irrelevant when
> processing XML. You can query the namespace of the node belongs to
> with ?node_namespace, for *each* node, regardless of the location of
> the xmlns attributes.
>
> > Thanks for all the input.
>
> > - Kirill
>
> >
> ------------------------------------------------------------------------------
> > Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco,
> CA
> > -OSBC tackles the biggest issue in open source: Open Sourcing the
> Enterprise
> > -Strategies to boost innovation and cut costs with open source
> participation
> > -Receive a $600 discount off the registration fee with the source code:
> SFAD
> > http://p.sf.net/sfu/XcvMzF8H
> > _______________________________________________
> > FreeMarker-user mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/freemarker-user
>
>
> > _____________ NOD32 3680 (20081210) Információ _____________
>
> > Az üzenetet a NOD32 antivirus system megvizsgálta.
> > http://www.nod32.hu
>
>
>
>
> --
> Best regards,
> fm mailto:[email protected]
>
>
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
FreeMarker-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemarker-user