【问题标题】:Generate xml file using php but ampersand is not displaying使用 php 生成 xml 文件,但与号不显示
【发布时间】:2016-05-24 22:54:28
【问题描述】:

我的 php 代码生成 xml 文件,但 url 中带有 & 符号的行没有显示。下面是php代码

$dom = new DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;

$root = $dom->createElement('journal');
$dom->appendChild($root);

$journal_metadata = $dom->createElement('journal_metadata');
$dom->appendChild($journal_metadata);

$issue_doi = $dom->createElement('doi', '11');
$issue_doi_data->appendChild($issue_doi);

$issue_resource = $dom->createElement('resource', 'http://localhost/fo/issues.php?jid=1&issueID=155');
$issue_doi_data->appendChild($issue_resource);


echo '<xmp>'. $dom->saveXML() .'</xmp>';
$dom->save('result.xml') or die('XML Create Error');

【问题讨论】:

标签: php xml dom


【解决方案1】:

你将不得不“逃脱”它。尝试使用:&amp;#38; 而不仅仅是 &amp;。

【讨论】:

【解决方案2】:

没有显示具有“url with &ampersand”的行,因为应该包含该 url 的 $issue_doi_data 变量未声明且未附加到初始文档$dom.
其次,如果收到警告消息“未终止的实体引用”,您可以使用htmlentities()(或htmlspecialchars())转义提供的值。
如下所示更改您的代码:

$dom = new \DOMDocument('1.0','UTF-8');
$dom->formatOutput = true;

$root = $dom->createElement('journal');
$dom->appendChild($root);

$journal_metadata = $dom->createElement('journal_metadata', '...');
$root->appendChild($journal_metadata);

// modify this line with your prefered name and value
$issue_doi_data = $dom->createElement('doi_data', '');

$issue_doi = $dom->createElement('doi', '11');
$issue_doi_data->appendChild($issue_doi);

$issue_resource = $dom->createElement('resource', htmlspecialchars('http://localhost/fo/issues.php?jid=1&issueID=155'));
$issue_doi_data->appendChild($issue_resource);
$root->appendChild($issue_doi_data);

// save xml into file
$dom->save('result.xml') or die('XML Create Error');
// outputting xml file content
echo '<xmp>'. html_entity_decode(file_get_contents('result.xml')) .'</xmp>';

// the output:
 <?xml version="1.0" encoding="UTF-8"?>
    <journal>
      <journal_metadata>...</journal_metadata>
      <doi_data>
        <doi>11</doi>
        <resource>http://localhost/fo/issues.php?jid=1&issueID=155</resource>
      </doi_data>
    </journal>

【讨论】:

  • 感谢您的 cmets。我希望我的输出显示 & 而不是 &
  • 感谢您的 cmets。它正在工作,但日志和 journal_metadata 的结束标记未显示在输出中。请帮我解决。谢谢
  • xml 标记(结构)应始终提供包含所有其他元素的“根”元素。如果“journal”旨在作为根精华,则应适当填写。检查我的更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
  • 2010-10-03
相关资源
最近更新 更多