1)如何添加循环以动态确定td之和的总和
2)@ key ='ip' - 还需要制作动态,从构造的t中获取值
<tr>
<th>Name</th>
<th>Type</th>
<th>Text</th>
<xsl:for-each-group select="//folder/element/property" group-by="@key">
<th><xsl:value-of select="current-grouping-key()"/></th>
</xsl:for-each-group>
</tr>
<tr>
<td>
<xsl:value-of select="@name"/>
</td>
<td>
<xsl:value-of select="@*[name() = 'xsi:type'][1]"/>
</td>
<td>
<xsl:value-of select="documentation"/>
</td>
<xsl:for-each select="...">
<td>
<xsl:value-of select="string-join(property[@key='ip']/@value, ', ')"/>
</td>
</xsl:for-each>
</tr>
输入xml文件
<folder name="Technology & Physical" type="technology">
<element xsi:type="archimate:Node" name="SMX_U_TEST">
<documentation>SMX</documentation>
<property key="ip" value="10.255.2.111"/>
</element>
<element xsi:type="archimate:Node" name="CBS3CVR">
<documentation>DSR3CVR</documentation>
<property key="ip" value="10.15.114.24"/>
<property key="port" value="1521"/>
<property key="hw"/>
</element>
<element xsi:type="archimate:Node" name="SMX">
<property key="ip" value="10.255.2.111"/>
<property key="port" value="8181"/>
<property key="port" value="8182"/>
<property key="port" value="8184"/>
</element>
<element xsi:type="archimate:Node" name="Informatica test">
<documentation>Informatica</documentation>
<property key="ip" value="10.11.30.89"/>
<property key="port" value="1521"/>
</element>
<element xsi:type="archimate:Node" name="DSR3TEST">
<documentation>DSR3TEST</documentation>
<property key="ip" value="10.255.3.133"/>
<property key="port" value="1521"/>
<property key="hw"/>
</element>
</folder>
outout html file
<html xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<body>
<h2>Technology & Physical</h2>
<table>
<tr>
<th>Name</th>
<th>Type</th>
<th>Text</th>
<th>ip</th>
<th>port</th>
<th>hw</th>
</tr>
<tr>
<td>CBS3CVR</td>
<td>archimate:Node</td>
<td>DSR3CVR</td>
<td>10.15.114.24</td>
<td>1521</td>
<td/>
</tr>
<tr>
<td>DSR3TEST</td>
<td>archimate:Node</td>
<td>DSR3TEST</td>
<td>10.255.3.133</td>
<td>1521</td>
<td/>
</tr>
<tr>
<td>Informatica test</td>
<td>archimate:Node</td>
<td>Informatica</td>
<td>10.11.30.89</td>
<td>1521</td>
<td/>
</tr>
<tr>
<td>SMX</td>
<td>archimate:Node</td>
<td/>
<td>10.255.2.111</td>
<td>8181, 8182, 8184</td>
<td/>
</tr>
<tr>
<td>SMX_U_TEST</td>
<td>archimate:Node</td>
<td>SMX</td>
<td>10.255.2.111</td>
<td/>
<td/>
</tr>
</table>
</body>
</html>
元素和属性的数量是无限的,键的名称可能不同。 我使用group by,如果你有另一个决定,请告诉我。谢谢!!!
答案 0 :(得分:0)
您可以在此处使用#uvod-ahoj {
position: absolute;
right: 0;
left: 14%;
}
#uvod-ahoj-div {
position: relative;
color: white;
background-color: #780d4f;
}
#uvod-ahoj-div > h1 {
color: white;
margin: 3rem 0;
padding: 3rem 0 0 0;
}
#uvod-ahoj-div > p {
margin: auto;
max-width: 60rem;
padding-bottom: 3rem;
}
来获取不同的distinct-values
密钥,而不是property
xsl:for-each-group
(假设您位于<xsl:variable name="properties" select="distinct-values(element/property/@key)" />
元素上)。
然后,对于XML中的每个folder
,您可以列出属性的值,如此
element
试试这个XSLT
<xsl:variable name="current" select="." />
<xsl:for-each select="$properties">
<td>
<xsl:value-of select="$current/property[@key=current()]/@value" separator=", " />
</td>
</xsl:for-each>
我假设您的实际XML确实声明了<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="xsi">
<xsl:output method="html" doctype-public="XSLT-compat" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" />
<xsl:template match="folder">
<xsl:variable name="properties" select="distinct-values(element/property/@key)" />
<table>
<tr>
<th>Name</th>
<th>Type</th>
<th>Text</th>
<xsl:for-each select="$properties">
<th><xsl:value-of select="."/></th>
</xsl:for-each>
</tr>
<xsl:for-each select="element">
<tr>
<td>
<xsl:value-of select="@name"/>
</td>
<td>
<xsl:value-of select="@xsi:type"/>
</td>
<td>
<xsl:value-of select="documentation"/>
</td>
<xsl:variable name="current" select="." />
<xsl:for-each select="$properties">
<td>
<xsl:value-of select="$current/property[@key=current()]/@value" separator=", " />
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>
名称空间前缀。我还在XSLT中声明它以使检索xsi
属性更简单。
编辑:如果您只能使用XSLT 1.0处理器,则无法使用xsl:type
来获取密钥。相反,您需要使用一种名为Muenchian Grouping的技术来获取不同的密钥。 (您也无法使用distinct-values
上的separator
属性。
请尝试使用此XSLT:
xsl:value-of