Freemarker - XSLT相当于副本

时间:2018-03-27 16:31:42

标签: xslt namespaces freemarker

我正在尝试在XSLT中模拟复制函数,我想要在响应中输出的节点内的所有内容。

使用此模板

<#ftl ns_prefixes={"D": "http://milyn.codehaus.org/Smooks"} output_format="XML">
${Order.orderitem.@@markup}

这里面临2个问题

  1. 输出我被转换为&lt;,&gt;以及XML标签。我确实需要XML格式来转义像&amp;这样的无效字符。等

  2. 如何删除每个节点中出现的名称空间

  3. 我的回答是

    &lt;orderitem xmlns=&quot;http://milyn.codehaus.org/Smooks&quot;&gt;&lt;position&gt;1&lt;/position&gt;&lt;quantity&gt;1&lt;/quantity&gt;&lt;productid&gt;364&lt;/productid&gt;&lt;title&gt;The 40YearOld&lt;/title&gt;&lt;price&gt;29.98&lt;/price&gt;&lt;/orderitem&gt;&lt;orderitem xmlns=&quot;http://milyn.codehaus.org/Smooks&quot;&gt;&lt;position&gt;2&lt;/position&gt;&lt;quantity&gt;1&lt;/quantity&gt;&lt;productid&gt;299&lt;/productid&gt;&lt;title&gt;Pulp Fiction&lt;/title&gt;&lt;price&gt;29.99&lt;/price&gt;&lt;/orderitem&gt;
    

    输入

    <Order xmlns="http://milyn.codehaus.org/Smooks" xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance">
    <header>
        <orderid>1</orderid>
        <statuscode>0</statuscode>
        <netamount>59.97</netamount>
        <totalamount>64.92</totalamount>
        <tax>4.95</tax>
        <date>Wed Nov 15 13:45:28 EST 2006</date>
    </header>
    <customerdetails>
        <username>user1</username>
        <name>
            <firstname>Harry</firstname>
            <lastname>Fletcher</lastname>
        </name>
        <state>South Dakota</state>
    </customerdetails>
    <orderitem>
        <position>1</position>
        <quantity>1</quantity>
        <productid>364</productid>
        <title>The 40YearOld</title>
        <price>29.98</price>
    </orderitem>
    <orderitem>
        <position>2</position>
        <quantity>1</quantity>
        <productid>299</productid>
        <title>Pulp Fiction</title>
        <price>29.99</price>
    </orderitem>
    

1 个答案:

答案 0 :(得分:0)

防止自动转义:<!-- null -->。 (不幸的是,XML包装方式早于自动转义,所以它仍然如此......)

防止重复${Order.orderitem.@@markup?no_esc} - es ...你不能。问题是xmlns - s没有orderitem可以知道的共同祖先,共同的@@markup可以解决这个问题,所以它做得最安全。