我在xml中的命名空间问题(来自供应商的xml)以及如何在xsl上解决这个问题。
我的xml:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="https://www.website.com/getdata/service/" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xmlresponse>
<header>
<reportinformation>
<time>27/06/2017 19:42:07</time>
<reporttype>getcompanyinformation</reporttype>
</reportinformation>
</header>
</xmlresponse>
</string>
我的xsl是
?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="https://www.website.com/getdat/service/">
<xsl:output indent="yes" method="xhtml" omit-xml-declaration="yes"/>
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/my:xmlresponse">
<html>
<head>
<title>www.website.com GetData XML Stylesheet</title>
</head>
<body>
<table>
<tr>
<td><span style="{$reporttitle}">GetData </span></td>
</tr>
<xsl:apply-templates select="my:reportinformation"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="my:reportinformation">
<tr>
<td align="left">
<table style="{$datatable}">
<tr>
<td><span style="{$prompt}">Timestamp:</span></td>
<td><span style="{$data}"><xsl:value-of select="my:time"/></span></td>
</tr>
<tr>
<td><span style="{$prompt}">Report type:</span></td>
<td><span style="{$data}"><xsl:value-of select="my:reporttype"/></span></td>
</tr>
</table>
</td>
</tr>
</xsl:template>
我的问题是显示模板报告信息中的信息,但不匹配/显示主模板中的信息。
我在xml中表现不佳,前端更多。好朋友要正确改造什么?
我搜索SO和谷歌但仍然或显示主模板或子模板。
答案 0 :(得分:1)
我可以看到你正确使用前缀my:来在XPath和匹配模式中指定命名空间中的元素。这确实是你需要做的。
但是,您还需要将此前缀链接到您的命名空间,否则此前缀并不意味着什么,实际上无效。
您需要做的就是在XSLT中替换
xmlns="https://www.website.com/getdat/service/"
与
xmlns:my="https://www.website.com/getdat/service/"
修改以添加其他问题:
您需要适当地匹配并选择您想要操作的元素。
您的第一个模式不应以xmlresponse为目标。它应该针对根目录,可以使用match =&#34; /&#34;简单地达到。使用match =&#34; / my:xmlresponse&#34;只有当xmlresponse是根元素时才会匹配,而不是。
调用apply-templates时,不应指定select。应用模板最终会按照您的意愿获得报告信息。但是,如果您尝试使用select =&#34; my:reportinformation&#34;只有在报告信息是孩子时才会有效。它不是,它是后代。你需要
select=".//my:reportinformation"
或者根本没有指定要应用于儿童的模板的选择,他们自己将存储桶传递给报告信息。
答案 1 :(得分:1)
您有许多语法错误,您应该能够通过比较样式表来检测这些错误:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="https://www.website.com/getdata/service/"
exclude-result-prefixes="my">
<xsl:template match="/my:string">
<html>
<head>
<title>www.website.com GetData XML Stylesheet</title>
</head>
<body>
<table>
<tr>
<td>
<span style="{UNDEFINED_VARIABLE}">GetData </span>
</td>
</tr>
<xsl:apply-templates select="my:xmlresponse/my:header/my:reportinformation"/>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="my:reportinformation">
<tr>
<td align="left">
<table style="{UNDEFINED_VARIABLE}">
<tr>
<td>
<span style="{UNDEFINED_VARIABLE}">Timestamp:</span>
</td>
<td>
<span style="{UNDEFINED_VARIABLE}">
<xsl:value-of select="my:time"/>
</span>
</td>
</tr>
<tr>
<td>
<span style="{UNDEFINED_VARIABLE}">Report type:</span>
</td>
<td>
<span style="{UNDEFINED_VARIABLE}">
<xsl:value-of select="my:reporttype"/>
</span>
</td>
</tr>
</table>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>