You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用XSL将XML转换为HTML时部分值缺失,如何修复XSL配置?

问题解决方法

问题根源

XML根节点声明了默认命名空间urn://x-artefacts-zags-rogdinf/types/4.0.1,所有不带前缀的子元素(如SerLcs、Last等)都归属该命名空间。但XSLT的XPath查询默认会将无前缀的节点名匹配为无命名空间节点,导致你写的路径无法命中这些字段,所以无法正常取值显示。

修复方案

方案1(改动最小,适配你当前使用的XSLT 2.0版本)

在<xsl:stylesheet>标签中新增xpath-default-namespace属性,值为XML的默认命名空间地址即可,修改后的完整XSL代码如下:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:ns2="urn://x-artefacts-zags-rogdinf/root/112-51/4.0.1"
                xmlns="urn://x-artefacts-zags-rogdinf/types/4.0.1"
                xpath-default-namespace="urn://x-artefacts-zags-rogdinf/types/4.0.1">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <HTML>
            <BODY>
                <H2>Birth data</H2>
                <span>Serial: <b>
                        <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:BrthLcs/SerLcs"/>
                    </b>
                </span>
                <p>             
                <span>Number: <b>
                        <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:BrthLcs/NumLcs"/>
                    </b>
                </span>
                </p>
                <p>
                <span>Date: <b>
                        <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:BrthLcs/DateLcs"/>
                    </b>
                </span> 
                </p>
                <H3>Additional data: </H3>
                <span>Last, First, Middle:
                            <b>
                                <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:SvReg/ns2:SvRodiv/ns2:FIOrogd/Last"/>
                            </b>
                            <b>
                                <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:SvReg/ns2:SvRodiv/ns2:FIOrogd/First"/>
                            </b>
                            <b>
                                <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:SvReg/ns2:SvRodiv/ns2:FIOrogd/Middle"/>
                            </b>
                </span>
                <p>
                <span>Date: <b>
                        <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:SvReg/ns2:SvRodiv/ns2:BirthDate"/>
                    </b>
                </span>
                </p>
                <p>
                <span>Place: <b>
                        <xsl:apply-templates select="//ns2:ROGDINFResponse/ns2:ZgsAnswer/ns2:BrthReg/ns2:SvReg/ns2:SvRodiv/ns2:BirthPlace/@Place"/>
                    </b>
                </span>
                </p>
            </BODY>
        </HTML>
    </xsl:template>
</xsl:stylesheet>

方案2(兼容XSLT 1.0版本)

显式给types命名空间声明自定义前缀,再修改所有对应字段的XPath路径:

  1. 在<xsl:stylesheet>中新增命名空间声明:xmlns:tns="urn://x-artefacts-zags-rogdinf/types/4.0.1"
  2. 把所有无前缀的字段名前加上tns:前缀,比如把SerLcs改为tns:SerLcs,Last改为tns:Last即可。

内容的提问来源于stack exchange,提问作者OxFord_Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:48:04