我有XML(非常大的文件),我想根据属性(列)值contact_name
的SORTING得到输出。这可能是使用某种工具还是编码?
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<?xml-stylesheet type="text/xsl" href="sms.xsl"?>
<smses count="4">
<sms address="+381642" subject="null" contact_name="C" />
<sms address="+3816424" subject="null" contact_name="A" />
<sms address="+3816427" subject="null" contact_name="B" />
</smses>
sms.xsl文件
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://android.riteshsahu.com">
<xsl:template match="/">
<html>
<head>
<style type="text/css">
body
{
font-family:arial,sans-serif;
color:#000;
font-size:13px;
color:#333;
}
table
{
font-size:1em;
margin:0 0 1em;
border-collapse:collapse;
border-width:0;
empty-cells:show;
}
td,th
{
border:1px solid #ccc;
padding:6px 12px;
text-align:left;
vertical-align:top;
background-color:inherit;
}
th
{
background-color:#dee8f1;
}
</style>
</head>
<body>
<h2>SMS Messages</h2>
<table>
<tr>
<th>Type</th>
<th>Number</th>
<th>Contact</th>
<th>Date</th>
<th>Message</th>
</tr>
<xsl:for-each select="smses/sms">
<xsl:sort select="contact_name" data-type="text"/>
<tr>
<td>
<xsl:if test="@type = 1">
Received
</xsl:if>
<xsl:if test="@type = 2">
Sent
</xsl:if>
</td>
<td><xsl:value-of select="@address"/></td>
<td><xsl:value-of select="@contact_name"/></td>
<td><xsl:value-of select="@date"/><br/><xsl:value-of select="@readable_date"/></td>
<td><xsl:value-of select="@body"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:1)
在您的XSLT文件sms.xsl
中,您可以<xsl:sort>
使用@
来引用属性,就像这样......
<xsl:sort select="@contact_name"/>
注意:定位很重要,需要在<xsl:for-each>
或<xsl:apply-templates>
之内。因此,只需在<xsl:for-each>
文件中的sms.xsl
开头后直接插入上述行...
<xsl:for-each select="smses/sms">
<xsl:sort select="@contact_name"/> <!-- new line -->
答案 1 :(得分:0)
这是XML格式的排序
<xsl:sort select="expression"
lang="language-code"
data-type="text|number|qname"
order="ascending|descending"
case-order="upper-first|lower-first"/>
在此之前,您需要知道XSTL格式。请参见示例here
其次你使用<xsl:sort select="contact_name" data-type="text"/>
在XML的XSL文件中
最后在这里
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:user="http://android.riteshsahu.com">
<xsl:template match="/">
<html>
<head>
<style type="text/css">
body
{
font-family:arial,sans-serif;
color:#000;
font-size:13px;
color:#333;
}
table
{
font-size:1em;
margin:0 0 1em;
border-collapse:collapse;
border-width:0;
empty-cells:show;
}
td,th
{
border:1px solid #ccc;
padding:6px 12px;
text-align:left;
vertical-align:top;
background-color:inherit;
}
th
{
background-color:#dee8f1;
}
</style>
</head>
<body>
<h2>SMS Messages</h2>
<table>
<tr>
<th>Type</th>
<th>Number</th>
<th>Contact</th>
<th>Date</th>
<th>Message</th>
</tr>
<xsl:for-each select="smses/sms">
<!-- Sorting added here -->
<xsl:sort select="contact_name" data-type="text"/>
<tr>
<td>
<xsl:if test="@type = 1">
Received
</xsl:if>
<xsl:if test="@type = 2">
Sent
</xsl:if>
</td>
<td><xsl:value-of select="@address"/></td>
<td><xsl:value-of select="@contact_name"/></td>
<td><xsl:value-of select="@date"/><br/><xsl:value-of select="@readable_date"/></td>
<td><xsl:value-of select="@body"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>