我正在尝试从以下XML片段中提取数据:
<?xml version= "1.0" ?>
<Stmts xmlns="http://tempuri.org/Statement.xsd" Generation="2011-08-01T12:41:41" >
<StatementDetail AccountStatus="Open" CompanyID="" TransactionCount="182" >
<Transactions>
<Manual.../>
...
</Transactions>
</StatementDetail>
</Stmts>
请注意,该元素具有xmlns属性。
当我尝试使用以下XSL时,我没有数据。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>CabCharge</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Batch</th>
<th>TransNo</th>
</tr>
<xsl:for-each select="Stmt/StatementDetail/Transactions/Manual">
<tr>
<td><xsl:value-of select="@Batch"/></td>
<td><xsl:value-of select="@TransNo"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
BUT!如果我从元素中删除XMLNS属性,我会获得数据。
我需要在XSL中指定识别名称空间???
感谢。
答案 0 :(得分:0)
确保在样式表中声明文档的默认命名空间,如:
<xsl:stylesheet version="1.0"
xmlns="http://tempuri.org/Statement.xsd"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
否则,XSLT处理器会将样式表中引用的元素视为属于默认命名空间null
。
此外,如果您希望从输出文档中删除命名空间,则需要为根文本元素html
声明空命名空间,如:
<xsl:template match="/">
<html xmlns="">
<!-- your stuff -->
</html>
</xsl:template>
请注意:
xsl:for-each
中,您选择了错误的元素(Stmt
代替Stmts
)Batch
和TransNo
属性。