我正在尝试从 uniprot XML 文件中选择一些数据,并且我能够得到我想要的大部分内容,但是我在获取同一节点中有更多条目的数据时遇到了问题。为了更容易,我将使用众所周知的 CD 收藏数据来展示我想要的东西。我还想知道将输出保存为 .csv 或 .txt 文件的最简单方法是什么。谢谢!让我知道是否有任何不清楚的地方。
XML 代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
<country>USA</country>
<company>Columbia</company>
<company>ABC</company>
<price>10.90</price>
<year>1985</year>
</cd>
<cd>
<title>Hide your heart</title>
<artist>Bonnie Tyler</artist>
<country>UK</country>
<company>CBS Records</company>
<company>ABC</company>
<price>9.90</price>
<year>1988</year>
</cd>
<cd>
<title>Greatest Hits</title>
<artist>Dolly Parton</artist>
<country>USA</country>
<company>RCA</company>
<price>9.90</price>
<year>1982</year>
</cd>
</catalog>
当前 XSLT 代码:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>Title</th>
<th>Artist</th>
<th>Company</th>
</tr>
<xsl:apply-templates />
</table>
</body>
</html>
</xsl:template>
<xsl:template match="catalog/cd">
<tr>
<xsl:apply-templates select="title|artist|company"/>
</tr>
</xsl:template>
<xsl:template match="title|artist|company">
<td>
<xsl:value-of select="."/>
</td>
</xsl:template>
</xsl:stylesheet>
电流输出:
My CD Collection
Title Artist Company
Empire Burlesque Bob Dylan Columbia ABC
Hide your heart Bonnie Tyler CBS Records ABC
Greatest Hits Dolly Parton RCA
所以我得到了我想要的所有数据,但我希望“公司”结果在 1 列中,如下所示:Columbia;ABC
此外,在我使用的文件中,同一节点中有更多条目是很常见的。但是,对于大多数人来说,我只想要第一个而不是全部,仅适用于某些节点。你怎么区分这两个?当我使用
<xsl:for-each select="uniprot/entry">
<tr>
<td>
<xsl:value-of select="name"/>
</td>
</tr>
它只返回第一项。所以主要是我想要这个,但我认为我需要其他我想要所有条目的节点。如果你能帮我解决这个问题,那就太好了。