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 多个条目,只留下您需要的一个条目。对我有用!
我被 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 多个条目,只留下您需要的一个条目。对我有用!