【问题标题】:XML XSLT Transform to XMLXML XSLT 转换为 XML
【发布时间】:2012-04-02 06:43:19
【问题描述】:

我有一个 XSLT 样式表,可以将 XML 文件转换为 JSON 格式,并且 XML 架构的一部分允许任何 XML,我只需将其编码为相应 JSON 中的字符串。

我已经创建了元素 好的,我只是无法让命名空间正常运行。

问题是当前元素范围内的每个命名空间都为每个元素输出。我只想输出最初在原始 XML 中声明的命名空间。

这是我目前正在尝试做的事情,我尝试了一些事情,但无法找到一种方法来做我需要的事情。

我调用了一个负责转换当前节点属性的模板:

<xsl:call-template name="elementAttributes">
        <xsl:with-param name="element" select="."/>
</xsl:call-template>

使用以下模板:

<xsl:template name="elementAttributes">
        <xsl:param name="element"/>
        <xsl:for-each select="$element/namespace::*">
            <!--dont include default namespace-->
            <xsl:if test="boolean(name())">
                <xsl:text> </xsl:text>
                <xsl:value-of select="name()"/>
                <xsl:text>='</xsl:text>
                <xsl:value-of select="."/>
                <xsl:text>'</xsl:text>
            </xsl:if>
        </xsl:for-each>
</xsl:template>

以 XML 为例:

<valueString>
        <dms:animal xmlns:dms="http://test.net/2012/dms/">
            <dms:dog>woof</dms:dog>
            <dms:cat>meow</dms:cat>
            <reptile:crocodile xmlns:reptile="http://reptile.test.net/2012/dms/"></reptile:crocodile>
        </dms:animal>
</valueString>

我的结局是:

<dms:animal dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>
<dms:dog dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>woof</dms:dog>
<dms:cat dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' xml='http://www.w3.org/XML/1998/namespace'>meow</dms:cat>
<reptile:crocodile dcds='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' dms='http://test.net/2012/dms/' ns0='http://purl.org/dc/xmlns/2008/09/01/dc-ds-xml/' reptile='http://reptile.test.net/2012/dms/' xml='http://www.w3.org/XML/1998/namespace'/>

当我基本上只想取回相同的 XML 时。

我知道可以进行复制以轻松地将 XML 复制到输出,但是由于 JSON 格式,我将结果作为文本输出,因此我无法让它以这种方式工作,因为只有文本节点将被复制而不是 XML 结构。

【问题讨论】:

标签: xml xslt xslt-1.0


【解决方案1】:

我会说你正在尝试做的是一个非常奇怪的设计。我所有的直觉都是回到需求阶段,看看不同的设计是否更有意义。

然而,如果你真的想做你想做的事,你将不得不检查每个命名空间,并且只有当命名空间在这个元素的范围内而不是在父元素的范围内时才输出它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 2016-08-24
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多