【问题标题】:How to show image element from XML with php如何使用 php 从 XML 中显示图像元素
【发布时间】:2021-11-19 02:06:36
【问题描述】:

我已经尝试过其他人在堆栈溢出上发布的内容,但它似乎对我不起作用。所以有人可以帮忙吗? 我有一个结构如下的 xml 文档:

<surveys>
<survey>
<section>
<page>
<reference>P1</reference>
<image><! [CDATA[<img src="imagepath">]]></image>
</page>
<page>
<reference>P2</reference>
<image><! [CDATA[<img src="imagepath">]]></image>
</page>
</section>
</survey>
</surveys>

然后这是我的 PHP 代码,用于显示图像:

function xml($survey){
$result = "<surveys></surveys>";
$xml_surveys = new SimpleXMLExtended($result);
$xml_survey = $xml_surveys->addChild('survey');
if ("" != $survey[id]){
$xml_survey_>addChildData($survey['image']);
}

这是我的另一个文件:

 $image = “”;

 if(“” != $image){
        $image = <div class=“image_holder”> $image </div> 
   echo $image;
}

我不确定如何在这方面取得进展。所以任何帮助将不胜感激

【问题讨论】:

  • xml 函数对它所做的处理没有任何作用 - 也许返回一些东西或回显或保存可能会更好??
  • $image 什么都不是。请展示您如何尝试阅读&lt;image&gt;&lt;! [CDATA[&lt;img src="imagepath"&gt;]]&gt;&lt;/image&gt;
  • 编辑了我的答案! (用PHP服务器测试后的固定答案,所以现在重试)

标签: php html xml


【解决方案1】:

您似乎想要获取特定调查 ID 的图像。那么你可以使用 DOM+Xpath 来直接获取这个:

$document = new DOMDocument();
$document->loadXML($xml);
$xpath = new DOMXpath($document);

$expression = 'string(
    /surveys/survey/section/page[reference="P1"]/image
)';
$imageForSurvey = $xpath->evaluate($expression);
var_dump($imageForSurvey);

输出:

string(22) "<img src="imagepath1">"

图像元素内的 CDATA 部分的内容是一个单独的 HTML 片段。如果您信任 XML 的来源或将其解析为 HTML,则可以直接使用它。

$htmlFragment = new DOMDocument();
$htmlFragment->loadHTML($imageForSurvey);
$htmlXpath= new DOMXpath($htmlFragment);

var_dump(
    $htmlXpath->evaluate('string(//img/@src)')
);

输出:

string(10) "imagepath"

【讨论】:

    【解决方案2】:

    您的示例逻辑正在尝试创建 XML,而不是加载它;-)

    首先您需要找到 XML 文件的路径和/或地址,例如:

    $filePath = __DIR__ . '/my-file.xml';
    

    然后加载 XML:

    <?php
    
    $filePath = __DIR__ . '/my-file.xml';
    
    $document = simplexml_load_file($filePath);
    
    $surveyCount = 0;
    foreach($document->survey as $survey)
    {
        $surveyCount = $surveyCount + 1;
        echo '<h1>Survey #' . $surveyCount . '</h1>';
        foreach($survey->section->page as $page)
        {
            echo 'Page reference: ' . $page->reference . '<br>';
            
            // Decode your image.
            $imageHtml = $page->image;
    
            $dom = new DOMDocument();
            $dom->loadHTML($imageHtml);
            $xpath= new DOMXpath($dom);
    
            $image = $xpath->evaluate('string(//img/@src)');
            if(!empty($image)) {
                echo '<div class=“image_holder”>' . $image . '</div>';
            }
    
            echo "<br>";
        }
    }
    ?>
    

    注意你应该用&lt;![CDATA[替换&lt;! [CDATA[(没有空格), 否则你可能会得到StartTag: invalid element name 错误。

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 2014-11-28
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多