Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python <;复印件>;XLST标记在不同处理器中应用不一致_Python_Xslt_Xslt 1.0_Lxml_Xalan - Fatal编程技术网

Python <;复印件>;XLST标记在不同处理器中应用不一致

Python <;复印件>;XLST标记在不同处理器中应用不一致,python,xslt,xslt-1.0,lxml,xalan,Python,Xslt,Xslt 1.0,Lxml,Xalan,编辑: 这是我能想到的lxml中最小的测试用例(完全用Python编写) 我正在使用的两个处理器之间是否存在实质性差异,或者是否有其他解释?出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释xsl:if,而这正是造成问题的原因 移除导致未定义行为的元素,它应该在不同的发动机上保持一致。出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释xsl:if,而这正是造成问题的原因 删除导致未定义行为的元素,它应该在不同的引擎中保持一致。啊,这

编辑:

这是我能想到的lxml中最小的测试用例(完全用Python编写)


我正在使用的两个处理器之间是否存在实质性差异,或者是否有其他解释?

出现异常行为的原因是。我只能假设,一些引擎正在“有益地”尝试以某种未定义的方式解释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))