【问题标题】:Problems with XSLT: No Tags in the outputXSLT 的问题:输出中没有标签
【发布时间】:2017-11-27 22:36:51
【问题描述】:

我被 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 默认命名空间”以获得此问题的 1000 个答案。或者无论如何,如果您只知道默认命名空间是问题所在,您会问这个问题。
  • @MichaelKay,就像我说的那样,我花了一整天的时间尝试了太多的事情——但我无法让它发挥作用。所以是我最后的手段。感谢您的反馈。祝你有美好的一天。
  • 是的,这是一个艰难的过程。每天都有人掉进这个大象陷阱,很难告诉他们在解决问题的方法上做错了什么。对于大多数人来说,我认为要吸取的教训是,在开始编码之前,值得花一两天时间阅读有关新技术的书籍。

标签: xml xslt transformation


【解决方案1】:

由于XSLT's built-in template rules,所有文本都显示在输出中。要解决该问题,您应该删除 &lt;xsl:apply-templates/&gt;,以便不进行其他处理。

没有新的 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>

【讨论】:

  • 嘿丹尼尔,非常感谢...您的建议确实成功了!我会仔细审查解决方案以了解问题所在,当然也会从中吸取教训。再次,非常感谢。问候
  • @MarcioCorrêa,为什么也不接受答案?请尊重人们回答和帮助的时间。
  • Dimitre,我投了赞成票,但 SO 说它不算数,因为我没有足够的声誉。我刚开始使用 StackOverfow,请原谅我。我尊重我得到的所有帮助,不仅在这里,而且在任何地方——请不要评判。
  • @MarcioCorrêa - 我相信 Dimitre 只是要求接受答案(通过单击旁边的复选标记),在他发表评论时尚未完成。您确实接受了我的回答,我非常感谢。感谢并欢迎使用 stackoverflow!
【解决方案2】:

我遇到了同样的问题,这是由 Eclipse 中的转换管道中的多个条目引起的。只需删除重复和/或多个条目,只留下您需要的单个条目。为我工作!

【讨论】:

  • 这与问题无关。
  • 输出不包含任何XML标签与问题无关?
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2014-09-19
  • 2014-03-17
  • 1970-01-01
相关资源
最近更新 更多