我有一个包含空xmlns:tag0=''
的xml有没有办法可以一起忽略命名空间或者为它添加一些默认值?
因为它阻止我的xml打开xsl转换。它说Reference to undeclared namespace prefix: 'tag0'.
或者有没有办法可以在开头用xmlns:tag0=''
替换xmlns:tag0='http://www.w3.org/TR/html4/
?
创建问题的xml的某些部分(xml大约为2MB)
<nodemetadata><imx:IMX versiondomainservice='2.4.1' versioncommon='2.2.0' serializationSpecVersion='4.0' xsi:schemaLocation='http://com.abc.imx IMX.xsd http://com.abc.aspd.metadata.domainservice/2 com.abc.aspd.metadata.domainservice.xsd http://com.abc.aspd.metadata.common/2 com.abc.aspd.metadata.common.xsd' crcEnabled='0' xmlns:imx='http://com.abc.imx' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><tag0:GatewayNodeConfig adminconsolePort='10073' nodeName='node01_rox.abc.com' imx:id='U:qywCXNr7EeG7SZfVCvSloA' domainName='Domain_rox.abc.com' dbConnectivity='ID_1' adminconsoleShutdownPort='10074' xmlns:tag0='http://com.abc.aspd.metadata.domainservice/2'><tag1:address port='10071' xsi:type='common:NodeAddress' host='rox.abc.com' httpPort='8080' imx:id='ID_2' xmlns:tag1=''></tag1:address><portals><tag1:NodeRef xsi:type='common:NodeRef' address='ID_2' nodeName='node01_rox.abc.com' imx:id='ID_3' xmlns:tag1=''></tag1:NodeRef></portals></tag0:GatewayNodeConfig><tag0:DBConnectivity imx:id='ID_1' dbConnectString='jdbc:abc:oracle:%2F%2FforKnight:1521%3BServiceName%3Dorcl%3BMaxPooledStatements%3D20%3BCatalogOptions%3D0%3BBatchPerformanceWorkaround%3Dtrue' dbType='ORACLE' dbEncryptedPassword='I7e20Erjax0wi7fY3qOaIxIBloTOBwLymgjvVVbkVcE%3D' dbUsername='lap1' xmlns:tag0='http://com.abc.aspd.metadata.domainservice/2'></tag0:DBConnectivity></imx:IMX></nodemetadata>
更新 我的XSL代码
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:tag0="http://www.w3.org/TR/html4/"
xmlns:tag1="http://www.w3.org/TR/html4/"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:imx="http://com.abc.imx"
xmlns:domainservice="http://com.abc.aspd.metadata.domainservice/2"
exclude-result-prefixes="tag0 tag1">
<xsl:include href="system_win.xsl"/>
<xsl:include href="system_nix.xsl"/>
<xsl:template match="/">
<html>
<head><link rel="stylesheet" type="text/css" href="http://www.abc.com/NR/inter2004/css/styles.css"/>
<style type="text/css">
.horz{overflow-x: auto; overflow-y: hidden;width: 98%;}
</style>
</head>
<body>
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:for-each select="client/product">
<h3><span style="color:#328aa4"><a name="_nodemetadata" href="#_top">Node MetaData</a></span></h3>
<h3>Gateway Node Configuration</h3>
<br/>
<dd>
<div class="horz">
<table border="1">
<tbody>
<tr>
<th>Domain Name</th>
<th>Node Name</th>
<th>Adminconsole Port</th>
<th>Adminconsole Shutdown Port</th>
<th>DB Connectivity</th>
</tr>
<xsl:for-each select="nodemetadata/imx:IMX/tag0:GatewayNodeConfig">
<tr>
<td valign="top" ><xsl:value-of select="@domainName"/></td>
<td valign="top" ><xsl:value-of select="@nodeName"/></td>
<td valign="top" ><xsl:value-of select="@adminconsolePort"/></td>
<td valign="top" ><xsl:value-of select="@adminconsoleShutdownPort"/></td>
<td valign="top" ><xsl:value-of select="@dbConnectivity"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</div>
</dd>
<br/>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
它在 tag0
上给了我 XML解析错误:绝不能取消前缀答案 0 :(得分:0)
修复输入XML后,以下XSLT 1.0样式表正在按要求运行:
另见http://www.xmlplayground.com/XyNCuA
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:imx="http://com.abc.imx"
xmlns:domainservice="http://com.abc.aspd.metadata.domainservice/2"
exclude-result-prefixes="imx domainservice"
>
<xsl:output method="html" />
<xsl:variable name="smallcase" select="'abcdefghijklmnopqrstuvwxyz'" />
<xsl:variable name="uppercase" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'" />
<xsl:template match="/">
<html>
<head>
<link rel="stylesheet" type="text/css" href="http://www.abc.com/NR/inter2004/css/styles.css"/>
<style type="text/css">
.horz{overflow-x: auto; overflow-y: hidden;width: 98%;}
</style>
</head>
<body>
<p>(see output source)</p>
<xsl:apply-templates select="client/product/nodemetadata" />
</body>
</html>
</xsl:template>
<xsl:template match="nodemetadata">
<h3><span style="color:#328aa4"><a name="_nodemetadata" href="#_top">Node MetaData</a></span></h3>
<xsl:apply-templates select=".//domainservice:GatewayNodeConfig" />
</xsl:template>
<xsl:template match="domainservice:GatewayNodeConfig">
<h3>Gateway Node Configuration</h3>
<dd>
<div class="horz">
<table border="1">
<thead>
<tr>
<th>Domain Name</th>
<th>Node Name</th>
<th>Adminconsole Port</th>
<th>Adminconsole Shutdown Port</th>
<th>DB Connectivity</th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" ><xsl:value-of select="@domainName"/></td>
<td valign="top" ><xsl:value-of select="@nodeName"/></td>
<td valign="top" ><xsl:value-of select="@adminconsolePort"/></td>
<td valign="top" ><xsl:value-of select="@adminconsoleShutdownPort"/></td>
<td valign="top" ><xsl:value-of select="@dbConnectivity"/></td>
</tr>
</tbody>
</table>
</div>
</dd>
<br/>
</xsl:template>
</xsl:stylesheet>
输出:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" type="text/css" href="http://www.abc.com/NR/inter2004/css/styles.css">
<style type="text/css">
.horz{overflow-x: auto; overflow-y: hidden;width: 98%;}
</style>
</head>
<body>
<p>(see output source)</p>
<h3><span style="color:#328aa4"><a name="_nodemetadata" href="#_top">Node MetaData</a></span></h3>
<h3>Gateway Node Configuration</h3>
<dd><div class="horz"><table border="1">
<thead><tr>
<th>Domain Name</th>
<th>Node Name</th>
<th>Adminconsole Port</th>
<th>Adminconsole Shutdown Port</th>
<th>DB Connectivity</th>
</tr></thead>
<tbody><tr>
<td valign="top">Domain_rox.abc.com</td>
<td valign="top">node01_rox.abc.com</td>
<td valign="top">10073</td>
<td valign="top">10074</td>
<td valign="top">ID_1</td>
</tr></tbody>
</table></div></dd>
<br>
</body>
</html>