Python <;复印件>;XLST标记在不同处理器中应用不一致
编辑: 这是我能想到的lxml中最小的测试用例(完全用Python编写)Python <;复印件>;XLST标记在不同处理器中应用不一致,python,xslt,xslt-1.0,lxml,xalan,Python,Xslt,Xslt 1.0,Lxml,Xalan,编辑: 这是我能想到的lxml中最小的测试用例(完全用Python编写) 我正在使用的两个处理器之间是否存在实质性差异,或者是否有其他解释?出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释xsl:if,而这正是造成问题的原因 移除导致未定义行为的元素,它应该在不同的发动机上保持一致。出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释xsl:if,而这正是造成问题的原因 删除导致未定义行为的元素,它应该在不同的引擎中保持一致。啊,这
我正在使用的两个处理器之间是否存在实质性差异,或者是否有其他解释?出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释xsl:if,而这正是造成问题的原因
移除导致未定义行为的元素,它应该在不同的发动机上保持一致。出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释xsl:if,而这正是造成问题的原因 删除导致未定义行为的元素,它应该在不同的引擎中保持一致。啊,这是XPath 我想我应该用
。我以为*
选择了所有当前节点及其子节点
谢谢你的帮助啊,是XPath
我想我应该用
。我以为*
选择了所有当前节点及其子节点
感谢您的帮助您能否使用最小有效的XML文件(即未填充
…
和等…
)添加不同的输出,以便我们可以看到这些差异?这与XML中的名称空间有关。如果我声明名称空间xmlns=“”,它在lxml中不起作用-可能与不允许使用默认名称空间有关?我以前从未听说过lxml中存在默认名称空间和XSLT的问题。关于这一点,有很多问题:例如,您是否可以使用最小有效的XML文件添加不同的输出(也就是说,没有填入…
和等…
),所以我们可以看到这些差异?这与xml中的名称空间有关。如果我声明名称空间xmlns=“”它在lxml中不起作用-可能与不允许使用默认名称空间有关?我以前从未听说过lxml中的默认名称空间和XSLT存在问题。在这方面有很多问题:例如
from lxml import etree
xslt_tree = etree.XML('''\
<?xml version="1.0" encoding="UTF-8"?>
<MD_Metadata xmlns="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco">
<language/>
<characterSet/>
</MD_Metadata>''')
doc = etree.XML('''\
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:gmd="http://www.isotc211.org/2005/gmd" >
<!-- This adds the contact tag if it doesn't exist -->
<xsl:template match="/gmd:MD_Metadata">
<xsl:copy-of select="*"/>
<xsl:message>
Worked
</xsl:message>
</xsl:template>
</xsl:stylesheet>''')
transform = etree.XSLT(doc)
result = transform(xslt_tree)
print transform.error_log
print (etree.tostring(result,pretty_print=True))
<language xmlns="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco"/>
<MD_Metadata xmlns="http://www.isotc211.org/2005/gmd" xmlns:gco="http://www.isotc211.org/2005/gco">
<language/>
<characterSet/>
</MD_Metadata>
<?xml version="1.0" encoding="UTF-8"?>
<MD_Metadata xmlns="http://www.isotc211.org/2005/gmd">
<language>
<LanguageCode codeList="http://www.loc.gov/standards/iso639-2/php/code_list.php" codeListValue="eng" codeSpace="ISO639-2">eng</LanguageCode>
</language>
<characterSet>
<MD_CharacterSetCode codeList="http://www.isotc211.org/2005/resources/Codelist/gmxCodelists.xml#MD_CharacterSetCode" codeListValue="utf8" codeSpace="ISOTC211/19115">utf8</MD_CharacterSetCode>
</characterSet>
.... etc
</MD_Metadata>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Show all elements -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- This adds the contact tag if it doesn't exist -->
<xsl:template match="/gmd:MD_Metadata">
<xsl:copy-of select="@*|node()">
<xsl:if test="not(/gmd:MD_Metadata/gmd:contact)">
<xsl:element name="contact" namespace="http://www.isotc211.org/2005/gmd">
</xsl:element>
</xsl:if>
</xsl:copy-of>
</xsl:template>
</xsl:stylesheet>
xslt_root = lxml.etree.parse("XSLFile")
transform = lxml.etree.XSLT(xslt_root)
result_tree = transform(doc)
print (etree.tostring(result_tree,pretty_print=True))