使用 XSL 将 XML 转换为 HTMl 时遗漏值
Missed values while transforming XML into HTMl using XSL
我的 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?
而不是 XSLT 中的 xmlns="urn://x-artefacts-zags-rogdinf/types/4.0.1"
你想要 xpath-default-namespace="urn://x-artefacts-zags-rogdinf/types/4.0.1"
在那里。请注意,这仅适用于 XSLT 2 和 3 处理器,如 Saxon 9 或 10、Saxon-JS 2、XmlPrime、Exselt、AltovaXML。
First、Last 和 Middle 确实有一个命名空间:它们在命名空间 urn://x-artefacts-zags-rogdinf/types/4.0.1
中。在 XPath 中,默认情况下,不带前缀的名称指的是不在命名空间中的元素。您可以按照@MartinHonnen 的建议使用 xpath-default-namespace
更改它。
我的 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?
而不是 XSLT 中的 xmlns="urn://x-artefacts-zags-rogdinf/types/4.0.1"
你想要 xpath-default-namespace="urn://x-artefacts-zags-rogdinf/types/4.0.1"
在那里。请注意,这仅适用于 XSLT 2 和 3 处理器,如 Saxon 9 或 10、Saxon-JS 2、XmlPrime、Exselt、AltovaXML。
First、Last 和 Middle 确实有一个命名空间:它们在命名空间 urn://x-artefacts-zags-rogdinf/types/4.0.1
中。在 XPath 中,默认情况下,不带前缀的名称指的是不在命名空间中的元素。您可以按照@MartinHonnen 的建议使用 xpath-default-namespace
更改它。