我有几个xhtmls来自我需要解析的不同系统,我决定使用转换将它们全部转换为标准的xml格式,然后我的应用程序可以解析和导入。我设法让一个工作,但第二个问题出了问题,我不知道是什么,因为我复制粘贴了代码。
让我们看一下第一个xml和转换的摘录:
XML
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- some really deep tree structure including a table -->
<table border="0" cellpadding="4" cellspacing="0" width="100%" class="md-maketable">
<tbody>
<tr valign="middle" class="md-maketable-reg-tr">
<!-- some tds inside -->
</tr>
<tr valign="middle" class="md-maketable-reg-tr">
<!-- some tds inside -->
</tr>
<!-- these trs repeat n number of times -->
</tbody>
</table>
</html>
转化
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:template match="/">
<movements>
<xsl:for-each select="//tr[@class="md-maketable-reg-tr"]">
<movement>
<!-- parsing some movements (uninteresting) -->
</movement>
</xsl:for-each>
</movements>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="utf-8"?>
<movements>
<movement>
<!-- some movement data -->
</movement>
</movements>
<!-- n number of movements -->
现在进入第二个
XML
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- some really deep tree structure including a table -->
<table id="transactions" border="0" cellpadding="1" cellspacing="1" width="100%">
<tbody>
<tr id="tr:1" class="interlaceOne">
<!-- some tds inside -->
</tr>
<tr id="tr:2" class="interlaceOne">
<!-- some tds inside -->
</tr>
<!-- these trs repeat n number of times -->
</tbody>
</table>
</html>
转化
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="no" indent="yes"/>
<xsl:template match="/">
<movements>
<xsl:for-each select="//tr[@class="interlaceOne"]">
<movement>
<!-- parsing some movements (uninteresting) -->
</movement>
</xsl:for-each>
</movements>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="utf-8"?>
<movements>
</movements>
P.S。我实际上在第二个上使用了不同的选择,但是我需要的那个没有带来任何结果,所以我把它改为调试哪个也行不通,所以我假设这个问题会有什么问题。也解决了真正选择的问题。
答案 0 :(得分:1)
显然,您的XML输入位于XHTML命名空间(xmlns="http://www.w3.org/1999/xhtml"
)中。
要处理使用命名空间的输入,您必须在样式表中声明命名空间,为其分配前缀并在寻址文档节点时使用该前缀 - 请参阅此处的示例:Not getting data to transform Xml