Freemarker - XSLT 等价于副本
Posted
技术标签:
【中文标题】Freemarker - XSLT 等价于副本【英文标题】:Freemarker - XSLT equivalent of copy-of 【发布时间】:2018-09-06 04:06:19 【问题描述】:我正在尝试在 XSLT 中模拟复制功能,我希望节点内的所有内容都在响应中输出。
使用这个模板
<#ftl ns_prefixes="D": "http://milyn.codehaus.org/Smooks" output_format="XML">
$Order.orderitem.@@markup
这里有两个问题
我得到的输出转换为 以及 XML 标记。我确实需要 XML 格式来转义 & 等无效字符。
如何删除出现在每个节点中的名称景观
我的回答是
<orderitem xmlns="http://milyn.codehaus.org/Smooks"><position>1</position><quantity>1</quantity><productid>364</productid><title>The 40YearOld</title><price>29.98</price></orderitem><orderitem xmlns="http://milyn.codehaus.org/Smooks"><position>2</position><quantity>1</quantity><productid>299</productid><title>Pulp Fiction</title><price>29.99</price></orderitem>
输入是
<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】:为了防止自动转义:$Order.orderitem.@@markup?no_esc
。 (不幸的是,XML 包装方式早于自动转义,所以它一直保持这样......)
防止重复xmlns
-es...你不能。问题是orderitem
-s 就@@markup
所知没有共同祖先,而共同的xmlns
可以解决这个问题,所以它是最安全的。
【讨论】:
以上是关于Freemarker - XSLT 等价于副本的主要内容,如果未能解决你的问题,请参考以下文章