проблема с атрибутом xslt и кодированием (или декодированием) с использованием XsltProcessor в PHP - PullRequest
0 голосов
/ 16 июня 2011

Я попробовал несколько вещей, чтобы заставить его работать.

Вот моя проблема.

У меня есть этот контент 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&amp;fname=phy_s.gif&amp;access=public</dc:URI>
  </csw:Record>
</csw:GetRecordByIdResponse>

и я пытаюсь использовать значение <dc:URI protocol="image/gif" name="thumbnail">resources.get?id=14&amp;fname=phy_s.gif&amp;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&amp;fname=phy_s.gif&amp;access=public"> </li> ... Обратите внимание, что значение в атрибуте src по-прежнему имеет &amp;, в то время как другое его значение выводится правильно &.

Заранее спасибо, Jack

1 Ответ

1 голос
/ 17 июня 2011

Обратите внимание, что значение в атрибуте href по-прежнему имеет &amp;, в то время как другое его значение выводится правильно &.

Нет, правильная и необходимая запись равна &amp;в атрибутах href в выводе.Мне лень набирать текст, объяснение см. В вопросе Удалить & из строки при записи в xml на PHP и в частности, этот ответ .

Даже другой.из которых вы ошибочно считали, что это правильно (&) должно быть записано как &amp; правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...