首页 > 解决方案 > 使用 XSL 将 XML 转换为 HTMl 时丢失的值

问题描述

我的 XML 文件的某些值在转换时未显示。看起来 XSL 命名空间有些不对劲,但我想不通。

要转换的 XML 文件

<?xml-stylesheet type="text/xsl" href="birth_new_3.xsl"?>
<ns2:ROGDINFResponse xmlns="urn://x-artefacts-zags-rogdinf/types/4.0.1"
                     xmlns:ns2="urn://x-artefacts-zags-rogdinf/root/112-51/4.0.1">
    <ns2:ZgsAnswer>
        <ns2:BrthReg>
            <ns2:BrthLcs>
                <SerLcs>II-LP</SerLcs>
                <NumLcs>443334</NumLcs>
                <DateLcs>1988-03-18</DateLcs>
            </ns2:BrthLcs>
            <ns2:SvReg>
                <ns2:SvRodiv>
                    <ns2:FIOrogd>
                        <Last>Last</Last>
                        <First>Fname</First>
                        <Middle>Mname</Middle>
                    </ns2:FIOrogd>
                    <ns2:BirthDate>1988-01-19</ns2:BirthDate>
                    <ns2:BirthPlace Place="Some place"/>
                </ns2:SvRodiv>
            </ns2:SvReg>
        </ns2:BrthReg>
    </ns2:ZgsAnswer>
</ns2:ROGDINFResponse>

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">
    <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>

我的 XML 的一些值显示得很好,但没有命名空间的字段的值没有显示(SerLcs、NumLcs、DateLcs、Last、First、Middle)。如何修复我的 XSL?

标签: htmlxmlxslt-2.0

解决方案


而不是xmlns="urn://x-artefacts-zags-rogdinf/types/4.0.1"在您想要的 XSLTxpath-default-namespace="urn://x-artefacts-zags-rogdinf/types/4.0.1"中。请注意,这只适用于 XSLT 2 和 3 处理器,例如 Saxon 9 或 10、Saxon-JS 2、XmlPrime、Exselt、AltovaXML。


推荐阅读