缺少子xmlns地址

时间:2017-03-14 13:52:36

标签: xml xslt

我尝试过研究这个问题,但找不到与我的问题相关的答案。我认为自己是一个不错的程序员,但我是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>

非常感谢任何帮助!

1 个答案:

答案 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)对序列化结果进行后处理。