【发布时间】:2016-05-12 23:31:34
【问题描述】:
我正在尝试将 Freemarker 用作 XSLT 和模板的组合。为了做到这一点,我需要能够提取部分 DOM 的文本,但不包括输出中的命名空间。
我的输入 XML 是:
<soap:update xmlns:soap="http://soap.borrower.random.com">
<soap:cin>data</soap:cin>
<soap:borrower>
<soap:ID>data</soap:ID>
<soap:SSN>data</soap:SSN>
<soap:city>data</soap:city>
<soap:first>data</soap:first>
<soap:last>data</soap:last>
<soap:line1>data</soap:line1>
<soap:phone>data</soap:phone>
<soap:state>data</soap:state>
<soap:zip>data</soap:zip>
</soap:borrower>
</soap:update>
我的模板是:
<#ftl ns_prefixes={"D":"http://soap.borrower.random.com"}>
<#assign xmlmsg = message.contentAsXml>
<update xmlns="http://mynewnamespace.org">
<cin>555</cin>
<borrower>
${xmlmsg.update.borrower.*.@@markup}
</borrower>
</update
我得到的输出是:
<update xmlns="http://mynewnamespace.org">
<cin>555</cin>
<borrower>
<ID xmlns="http://soap.borrower.random.com">data</ID>
<SSN xmlns="http://soap.borrower.random.com">data</SSN>
<city xmlns="http://soap.borrower.random.com">data</city>
<first xmlns="http://soap.borrower.random.com">data</first>
<last xmlns="http://soap.borrower.random.com">data</last>
<line1 xmlns="http://soap.borrower.random.com">data</line1>
<phone xmlns="http://soap.borrower.random.com">data</phone>
<state xmlns="http://soap.borrower.random.com">data</state>
<zip xmlns="http://soap.borrower.random.com">data</zip>
</borrower>
</update>
当然,这在技术上是正确的,但我确实需要从单个元素中剥离所有命名空间声明,以便我可以将该文本粘贴到我正在创建的元素中,并让这些元素假定它们的命名空间父母。
有没有简单的方法可以做到这一点?
TIA
伊恩
【问题讨论】:
标签: xml freemarker