Я попробовал несколько вещей, чтобы заставить его работать.
Вот моя проблема.
У меня есть этот контент XML
<?xml version="1.0" encoding="UTF-8"?>
<csw:GetRecordByIdResponse xmlns:csw="http://www.opengis.net/cat/csw/2.0.2">
<csw:Record xmlns:dct="http://purl.org/dc/terms/" xmlns:ows="http://www.opengis.net/ows" xmlns:geonet="http://www.fao.org/geonetwork" xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:identifier>b6ebec90-96ac-477f-bfcf-ccef920e3e99</dc:identifier>
<dc:title>Physiographic Map of North and Central Eurasia (Sample record, please remove!)</dc:title>
<dct:abstract>Physiographic maps ... </dct:abstract>
<dc:rights>copyright</dc:rights>
<dc:language />
<dc:source />
<ows:BoundingBox crs="urn:ogc:def:crs:::Lambert Azimuthal Projection">
<ows:LowerCorner>156 -3</ows:LowerCorner>
<ows:UpperCorner>37 83</ows:UpperCorner>
</ows:BoundingBox>
<dc:URI protocol="image/gif" name="thumbnail">resources.get?id=14&fname=phy_s.gif&access=public</dc:URI>
</csw:Record>
</csw:GetRecordByIdResponse>
и я пытаюсь использовать значение <dc:URI protocol="image/gif" name="thumbnail">resources.get?id=14&fname=phy_s.gif&access=public</dc:URI>
в качестве источника тега img.
Обратите внимание, что значение в XML кодируется (& вместо &)
Вот xsl, который я использую для преобразования XML в HTML
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:csw="http://www.opengis.net/cat/csw/2.0.2"
xmlns:dct="http://purl.org/dc/terms/"
xmlns:geonet="http://www.fao.org/geonetwork"
xmlns:ows="http://www.opengis.net/ows"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:fn="http://www.w3.org/2005/xpath-functions" >
<xsl:output method="html" encoding="UTF-8" indent="yes" />
<xsl:template match="csw:GetRecordByIdResponse">
<html>
<head>
<meta charset="utf-8" />
</head>
<body>
<xsl:apply-templates select="csw:Record" />
</body>
</html>
</xsl:template>
<xsl:template match="csw:Record">
<h1><xsl:value-of select="dc:title" /><span class='identifier'><xsl:value-of select="dc:identifier" /></span></h1>
<p class='description'><xsl:value-of select="dc:title" /></p>
<ul>
<xsl:for-each select="dc:URI">
<xsl:if test="@name = 'thumbnail'">
<li>
<xsl:value-of select="." disable-output-escaping="yes" />
<xsl:element name="img">
<xsl:attribute name="src"><xsl:text>http://localhost:8080/geonetwork/srv/en/</xsl:text><xsl:value-of select="." disable-output-escaping="yes" /></xsl:attribute>
</xsl:element>
</li>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:template>
Я использую PHP для его обработки
<?php
$xp = new XsltProcessor();
// create a DOM document and load the XSL stylesheet
$xsl = new DomDocument;
$xsl->load('sample.xsl');
// import the XSL styelsheet into the XSLT process
$xp->importStylesheet($xsl);
$xml_doc = new DomDocument;
$xml_doc->loadXML(file_get_contents('sample.xml'));
// transform the XML into HTML using the XSL file
if ($html = $xp->transformToXML($xml_doc))
echo $html;
?>
Я все еще получаю этот вывод ... <li>resources.get?id=14&fname=phy_s.gif&access=public<img src="http://localhost:8080/geonetwork/srv/en/resources.get?id=14&fname=phy_s.gif&access=public">
</li>
... Обратите внимание, что значение в атрибуте src по-прежнему имеет &
, в то время как другое его значение выводится правильно &
.
Заранее спасибо,
Jack