0
我有几个xhtmls来自我需要解析的不同系统,我决定使用转换将它们全部转换为我的应用程序可以解析的标准xml格式,进口。我设法得到一个工作,但第二个有什么问题,我不知道是什么,因为我复制粘贴代码。XLST句子不匹配的原因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.我实际上在第二个选择使用不同的选择,但我需要的是没有带来任何结果,所以我将其更改为此调试,这也没有工作,所以我假设任何修复此问题将也为真正的选择解决问题。
请张贴足够的代码( XML + XSL)使我们能够重现问题。请参阅:http://stackoverflow.com/help/mcve --- P.S.如果我不得不猜测,我会说你的第二个XML的元素是在* namespace *中。 –
添加了更多细节,但我无法发布整个xml文件。我如何找到命名空间?我如何改变这个转变来适应它呢?我是XSLT新手,所以我可能会忽略“明显”的事情。 – PedroC88
好吧,现在你表明**两个**都在xhtml命名空间('xmlns =“http://www.w3.org/1999/xhtml”') - 所以我没有看到你的第一个转换可以如何正在工作。我建议你做一个搜索,因为有*许多*以前的答案解释如何处理名称空间(例如:http://stackoverflow.com/questions/22590320/not-getting-data-to-transform-xml/22590777# 22590777) –