lxml抛出xslt解析错误 - 无法模板匹配除

时间:2016-10-24 10:04:10

标签: python xml xslt lxml

我使用python / lxml将源xml转换为目标xml格式。当我尝试将模板与除root之外的任何其他元素匹配时,我不断得到XLSTParseError(' /')但是无法弄清楚出了什么问题 - 非常确定它的命名空间虽然相关...我正在尝试的内容从源xml访问包含在元素中。知道如何修复或如何让lxml输出更详细的错误消息?

源xml有声明:



 <?xml version="1.0" encoding="UTF-8"?>
    <dataroot generated="2016-10-24T09:16:37" xsi:noNamespaceSchemaLocation="BOLIG_XML.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:od="urn:schemas-microsoft-com:officedata">
	<BOLIG_XML>...</BOLIG_XML>
	<BOLIG_XML>...</BOLIG_XML>
&#13;
&#13;
&#13;

...

目标xml有声明:

&#13;
&#13;
<?xml version="1.0" encoding="utf-8"?>
    <BoligListe xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:oio:lbf:1.0.0">
	    <BoligStruktur>...</BoligStruktur>
	    <BoligStruktur>...</BoligStruktur>
        ...
&#13;
&#13;
&#13;

XSLT目前看起来像这样:

&#13;
&#13;
 xslt_tree = etree.XML('''\
        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
	        <BoligListe xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:oio:lbf:1.0.0">
            <xsl:template match="BOLIG_XML">
                    <BoligStruktur>hello world</BoligStruktur>
                </xsl:template>
            </BoligListe>  
        </xsl:template>
        </xsl:stylesheet>'''
    )
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

每个xsl:template元素都需要是样式表根元素的顶级元素,您不能像在XSLT代码中尝试那样嵌套模板。然后使用xsl:apply-templates处理具有匹配模板的子元素,因此我猜你想要

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <BoligListe xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:oio:lbf:1.0.0">
           <xsl:apply-templates/>
        </BoligListe>  
    </xsl:template>
        <xsl:template match="BOLIG_XML">
                <BoligStruktur>hello world</BoligStruktur>
            </xsl:template>
    </xsl:stylesheet>