使用XSLT转换将XML转换为XSL

时间:2013-06-28 14:37:03

标签: xml xslt

好的,所以我有这个文件,我试图在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.&#xD;</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>

任何提示都会非常感激,谢谢......

1 个答案:

答案 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>
相关问题