我有一些来自不同系统的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>实际上,我在第二个选项上使用了一个不同的选项,但是我需要的那个选项并没有带来任何结果,所以我把它改成了这个选项,因为它也不起作用,所以我假设任何修复这个问题的方法也会解决真正的选择的问题。
发布于 2015-10-20 06:51:27
显然,您的XML输入位于XHTML命名空间(xmlns="http://www.w3.org/1999/xhtml")中。
若要处理使用命名空间的输入,必须在样式表中声明名称空间,为其分配前缀,并在寻址文档节点时使用该前缀-参见这里的示例:Not getting data to transform Xml。
https://stackoverflow.com/questions/33228482
复制相似问题