我有一个
XML文档,如:::
<?xml version="1.0" encoding="utf-8"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="urn:schemas-microsoft-com:office:spreadsheet"> <Worksheet ss:Name="Worksheet1"> <Table> <Column ss:Width="100"></Column> <Row> <Cell ss:Index="1" ss:StyleID="headerStyle"> <Data ss:Type="String">Submitted By</Data> </Cell> </Row> <Row> <Cell ss:Index="1" ss:StyleID="alternatingItemStyle"> <Data ss:Type="String">Value1-0</Data> </Cell> </Row> </Table> <AutoFilter xmlns="urn:schemas-microsoft-com:office:excel" x:Range="R1C1:R1C5"></AutoFilter> </Worksheet> </Workbook>
问题是当尝试选择行时
<xsl:for-each select="//Row"> <xsl:copy-of select="."/> </xsl:for-each>
在XSLT中为命名空间声明一个命名空间前缀,然后选择使用该前缀:
<xsl:stylesheet ... xmlns:os="urn:schemas-microsoft-com:office:spreadsheet"> ... <xsl:for-each select="//os:Row"> ... </xsl:for-each> ... </xsl:stylesheet>
这通常导致易于阅读的XPath.但是,XSLT / XPath工具生成以下等效代码:
<xsl:for-each select="//*[local-name()='Row' = and namespace-uri()='urn:schemas-microsoft-com:office:spreadsheet']"> ... </xsl:for-each>