好的,所以我有这个文件,我试图在xsl中转换,所以我可以稍后将其转换为rdf数据。这是我到目前为止在xsl文件中创建的:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<html>
<head>
<h1>DrugBank Data</h1>
</head>
<body>
<table border ="2">
<thead>
<tr>
<th>Drugbank Id</th>
<th>Name</th>
<th>Description</th>
<th>Substrate</th>
<th>Enzymes</th>
<th>Mechanism Of Action</th>
<th>Targets</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="drugs/drug">
<tr>
<td><xsl:value-of select="drugbank-id"/></td>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="description"/></td>
<td><xsl:value-of select="substrate"/></td>
<td><xsl:value-of select="enzymes"/></td>
<td><xsl:value-of select="mechanism-of-action"/></td>
<td><xsl:value-of select="targets"/></td>
</tr>
</xsl:for-each>
</tbody>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
这是我的xml文件示例:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" version="2.0" href="drugbank.xsl"?>
<drugs xmlns="http://drugbank.ca" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" schemaVersion="1.4" xs:schemaLocation="http://www.drugbank.ca/docs/drugbank.xsd">
<drug type="biotech" created="2005-06-13 07:24:05 -0600" updated="2013-05-12 21:37:25 -0600" version="3.0">
<drugbank-id>DB00001</drugbank-id>
<name>Lepirudin</name>
<description>Lepirudin is identical to natural hirudin except for substitution of leucine for isoleucine at the N-terminal end of the molecule and the absence of a sulfate group on the tyrosine at position 63. It is produced via yeast cells.
</description>
<cas-number>120993-53-5</cas-number>
<synthesis-reference></synthesis-reference>
<indication>For the treatment of heparin-induced thrombocytopenia</indication>
<pharmacology>Lepirudin is used to break up clots and to reduce thrombocytopenia. It binds to thrombin and prevents thrombus or clot formation. It is a highly potent, selective, and essentially irreversible inhibitor of thrombin and clot-bond thrombin. Lepirudin requires no cofactor for its anticoagulant action. Lepirudin is a recombinant form of hirudin, an endogenous anticoagulant found in medicinal leeches.</pharmacology>
<mechanism-of-action>Lepirudin forms a stable non-covalent complex with alpha-thrombin, thereby abolishing its ability to cleave fibrinogen and initiate the clotting cascade. The inhibition of thrombin prevents the blood clotting cascade. </mechanism-of-action>
任何提示都会非常感激,谢谢......
答案 0 :(得分:1)
<drugs xmlns="http://drugbank.ca" ....>
这是您的“问题” - 因为XML文件具有默认命名空间声明,文件中所有未加前缀的元素名称都在此命名空间中。现在在XPath(1.0)表达式中,未加前缀的名称总是选择名称空间中不的节点,所以
<xsl:for-each select="drugs/drug">
什么都不选。您需要将前缀绑定到样式表中的http://drugbank.ca
命名空间,并在XPath表达式中使用此前缀
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:db="http://drugbank.ca"
exclude-result-prefixes="db">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:template match="/">
<!-- ... boilerplate omitted ... -->
<tbody>
<xsl:for-each select="db:drugs/db:drug">
<tr>
<td><xsl:value-of select="db:drugbank-id"/></td>
<td><xsl:value-of select="db:name"/></td>
<td><xsl:value-of select="db:description"/></td>
<td><xsl:value-of select="db:substrate"/></td>
<td><xsl:value-of select="db:enzymes"/></td>
<td><xsl:value-of select="db:mechanism-of-action"/></td>
<td><xsl:value-of select="db:targets"/></td>
</tr>
</xsl:for-each>
</tbody>