XSLT 的问题:输出中没有标签

Problems with XSLT: No Tags in the output

我被 XSL 转换困住了,一整天都在尝试很多事情。显然我不是这方面的专家。

你能帮助我了解我的 XSL 文件有什么问题吗?

这是我的来源XML。

<?xml version="1.0" encoding="UTF-8"?>
<PublishPFTEST xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" creationDateTime="2017-08-18T17:20:13-03:00" transLanguage="EN" baseLanguage="EN" messageID="7584270.1503087614245122357" maximoVersion="7 6 20161014-1020 V7606-50" event="1">
  <PFTESTSet>
    <WORKORDER action="Add">
      <ASSETNUM>MPC1234</ASSETNUM>
      <DESCRIPTION>WOTEST</DESCRIPTION>
      <WONUM>WO123</WONUM>
      <SITEID>BEDFORD</SITEID>

    </WORKORDER>
  </PFTESTSet>
</PublishPFTEST>

我的 XSL 文件:

<?xml version="1.0" encoding="UTF-8" ?>

<xsl:stylesheet version="1.0" xmlns="http://www.ibm.com/maximo" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <xsl:output method="xml" indent="yes"/>
    <xsl:template match="/">
        <TemplateSet>
            <xsl:for-each select="/PublishPFTEST/PFTESTSet/WORKORDER">
                <asset>
                    <xsl:value-of select="ASSETNUM"/>
                </asset>
                <desc>
                    <xsl:value-of select="DESCRIPTION"/>
                </desc>

            </xsl:for-each>
            <xsl:apply-templates/>
        </TemplateSet>
    </xsl:template>
</xsl:stylesheet>

这是转换后的 XML 文件...它显示其他数据,没有 XML 标签。

<?xml version="1.0" encoding="utf-8"?>
<TemplateSet xmlns="http://www.ibm.com/maximo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">


      MPC1234
      WOTEST
      WO123
      BEDFORD



</TemplateSet>

抱歉,这个虚拟问题。

由于 XSLT's built-in template rules,所有文本都显示在输出中。要解决该问题,您应该删除 <xsl:apply-templates/>,这样就不会进行其他处理。

没有新的 XML 元素输出,因为您的 xsl:for-each 从未选择任何内容。这是因为您的 XML 正在使用默认命名空间 http://www.ibm.com/maximo。您可以将该命名空间绑定到一个前缀并在您的 XPath 中使用它。

两个建议的示例(我还添加了 exclude-result-prefixes="m" 因此命名空间不会被输出)...

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
  xmlns:m="http://www.ibm.com/maximo" 
  exclude-result-prefixes="m">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <TemplateSet>
      <xsl:for-each select="/m:PublishPFTEST/m:PFTESTSet/m:WORKORDER">
        <asset>
          <xsl:value-of select="m:ASSETNUM"/>
        </asset>
        <desc>
          <xsl:value-of select="m:DESCRIPTION"/>
        </desc>
      </xsl:for-each>
    </TemplateSet>
  </xsl:template>

</xsl:stylesheet>

我遇到了同样的问题,这是由 Eclipse 中的转换管道中的多个条目引起的。只需删除重复的 and/or 多个条目,只留下您需要的一个条目。对我有用!