我有一个修改过的XSLT查询,它会返回我想要的所有内容但是有一个我不想要的附加元素。我如何修改它以摆脱<identifier type="nt">80df0b42de8f31ac4cb7a30d325ff0c1</identifier>
行。 xml是:
<?xml version="1.0" encoding="UTF-8"?>
<CMDBTopology>
<Objects>
<CMDBSet>
<name>80df0b42de8f31ac4cb7a30d325ff0c1</name>
<CMDBObject>
<identifier type="nt">80df0b42de8f31ac4cb7a30d325ff0c1</identifier>
<Properties>
<root_class type="STRING">nt</root_class>
<host_servertype type="STRING"></host_servertype>
<host_osrelease type="STRING"></host_osrelease>
<display_label type="STRING">pharsm-s3004</display_label>
<host_osinstalltype type="STRING"></host_osinstalltype>
</Properties>
</CMDBObject>
我目前的xlst查询是“
<html>
<head>
<title> title </title>
</head>
<body>
<xsl:apply-templates />
</body>
</html>
<table width="1" border="1" >
<tr>
<td> <xsl:value-of select="display_label" /> </td>
<td> <xsl:value-of select="root_class" /> </td>
<td> <xsl:value-of select="resolver_group" /> </td>
<td> <xsl:value-of select="supported_by" /> </td>
<td> <xsl:value-of select="environment" /> </td>
<td> <xsl:value-of select="site_code" /> </td>
<td> <xsl:value-of select="sla_classification" /> </td>
<td> <xsl:value-of select="datacenter" /> </td>
</tr>
</table>
`
答案 0 :(得分:1)
很难给出准确的答案,不知道您希望输出看起来是什么样的,但您的主要问题是您的XSLT中有一个匹配CMDBRelation
的模板,就像这样。 ..
<xsl:template match="CMDBRelation" >
但是XML中没有这样的CMDBRelation
元素!这意味着永远不会调用此模板。这意味着,当您在第一个模板中执行<xsl:apply-templates />
时,XSLT&#34;内置模板&#34;正在使用。这些有效地迭代XML中的所有节点,输出他们找到它们的文本节点,这就是为什么你得到所有文本打印输出而没有表格格式化。
我怀疑您的模板实际上需要匹配CMDBSet
<xsl:template match="CMDBRelation" >
您似乎也在To
语句中引用了From
和xsl:for-each
元素,而且与以前一样,这些元素并不存在于您的XML中。
<xsl:for-each select="To/CMDBObject/Properties">
您可能需要将两个语句合并为一个,例如
<xsl:for-each select="CMDBObject/Properties">
这是一些修改后的XSLT,它可以生成一个表,并且不会输出任何identifier
元素。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title> title </title>
</head>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="CMDBSet">
<table width="1" border="1">
<xsl:for-each select="CMDBObject/Properties">
<tr>
<td><xsl:value-of select="display_label"/></td>
<td><xsl:value-of select="root_class"/></td>
<td><xsl:value-of select="host_servertype"/></td>
<td><xsl:value-of select="host_osrelease"/></td>
<td><xsl:value-of select="host_osinstall"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>