我尝试过研究这个问题,但找不到与我的问题相关的答案。我认为自己是一个不错的程序员,但我是XSLT的新手。 目前,我正在尝试在XML中输出命名空间的地址引用。原始的XSL看起来像这样:
<xsl:element name="PrimaryLocation">
<xsl:element name="ns1:entity-AccountLocation">
<xsl:element name="ns1:NonSpecific" namespace="http://guidewire.com/pc/gx/gwservices.pc.dm.gx.shared.location.addressmodel">false</xsl:element>
</xsl:element>
结果XML返回:
<PrimaryLocation>
<ns1:entity-AccountLocation xmlns:ns1="http://guidewire.com/pc/gx/gwservices.pc.dm.gx.shared.location.addressmodel">
<ns1:NonSpecific>false</ns1:NonSpecific>
</ns1:entity-AccountLocation>
我希望看到的是:
<PrimaryLocation >
<ns1:entity-AccountLocation xmlns:ns1="http://guidewire.com/pc/gx/gwservices.pc.dm.gx.shared.location.addressmodel">
<ns1:NonSpecific xmlns:ns1="http://guidewire.com/pc/gx/gwservices.pc.dm.gx.shared.location.addres smodel">false</ns1:NonSpecific>
</ns1:entity-AccountLocation>
非常感谢任何帮助!
答案 0 :(得分:0)
您想要的输出包含一个完全冗余的命名空间声明,并且您不能强制XSLT处理器输出冗余的命名空间声明。
是的,这可能是一个问题,例如某些人仍然使用DTD,如果设计糟糕,DTD可能要求命名空间声明甚至在不执行有用功能的地方出现。最好的答案是修复接收应用程序以正确处理XML。
如果您确实需要这样做,最好的方法可能是输出一些所需输出的近似值,例如属性
X__change_me__X =&#34; HTTP://guidewire.com/pc/gx/gwservices.pc.dm.gx.shared.location.addressmodel"
然后使用非XML感知工具(例如sed或Perl)对序列化结果进行后处理。