[英]PHP XMLWriter: What parameters do I need to pass to XMLWriter::writeDtdEntity to generate a nested entity DTD declaration as described?
我想用XMLWriter在XML文檔的頂部生成一個嵌套的實體DTD聲明。 我開始只使用沒有XMLWriter的字符串構建代碼來說明所需的輸出:
<?php
$sXML = "<!DOCTYPE Example PUBLIC \"urn:example:example.org:20110823:Example\"\n";
$sXML .= "\"http://www.example.org/example.dtd\" [\n";
$sXML .= "<!ENTITY % nestedentity SYSTEM ";
$sXML .= "\"http://www.example.org/nestedentity.dtd\">\n";
$sXML .= "%nestedentity;\n";
$sXML .= "]>\n";
當前(所需)$ sXML輸出:
<!DOCTYPE Example PUBLIC "urn:example:example.org:20110823:Example"
"http://www.example.org/example.dtd" [
<!ENTITY % anentity SYSTEM "http://www.example.org/nestedentity.dtd">
%anentity;
]>
當前的XMLWriter $ sXML輸出(代碼如下):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Example
PUBLIC "urn:example:example.org:20110823:Example"
"http://www.example.org/example.dtd" [
<!ENTITY % anentity PUBLIC "" "http://www.example.org/nestedentity.dtd">
]>
如您所見,當前的XMLWriter代碼XML輸出存在以下問題:
所以,問題是,如何調用$oXMLWriter->writeDtdEntity
,以便顯示“Current(Desired) $sXML
Output”部分中顯示的XML字符串(忽略純空格中的差異)?
當前的XMLWriter代碼:
<?php
$oWriter = new XMLWriter();
$oWriter->openMemory();
$oWriter->setIndent(true);
$oWriter->setIndentString("\t");
$oWriter->startDocument("1.0", "UTF-8");
$oWriter->startDtd('Example','urn:example:example.org:20110823:Example', 'http://www.example.org/example.dtd');
$oWriter->writeDtdEntity(
'nestedentity',
'%nestedentity;\n',
true,
null,
'http://www.example.org/nestedentity.dtd'
);
$oWriter->endDtd();
$oWriter->endDocument();
$sXML = $oWriter->outputMemory();
嗯,我不是DTD的專家,但我注意到了一些錯誤:
您在XMLWriter::startDTD
為$publicId
和$systemId
提供了值。 您必須為$publicId
提供NULL
才能看到SYSTEM
而不是PUBLIC
。
你將XMLWriter::writeDTD
與XMLWriter::writeDTDEntity
。 后者只接受兩個參數:實體名稱和實體值
只是一個簡短的例子:
$oWriter = new XMLWriter();
$oWriter->openMemory();
$oWriter->setIndent(true);
$oWriter->setIndentString("\t");
$oWriter->startDocument("1.0", "UTF-8");
// use null for $publicID to force SYSTEM
$oWriter->startDtd('Example', null, 'http://www.example.org/example.dtd');
$oWriter->writeDTDEntity('foo', 'bar');
$oWriter->endDtd();
$oWriter->endDocument();
$sXML = $oWriter->outputMemory();
結果如預期(注意SYSTEM
而不是PUBLIC
):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Example
SYSTEM "http://www.example.org/example.dtd" [
<!ENTITY foo "bar">
]>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.