gpt4 book ai didi

PHP XMLWriter:我需要传递哪些参数来传递两个 XMLWriter::write IdEntity 以生成所描述的嵌套实体 DTD 声明?

转载 作者:数据小太阳 更新时间:2023-10-29 02:37:22 25 4
gpt4 key购买 nike

我想使用 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 输出存在以下问题:

  1. 嵌套实体引用为 PUBLIC,而不是 SYSTEM
  2. 在所需的系统标识符之前有一个空字符串
  3. 在关闭 DOCTYPE 声明之前不内联实体扩展字符串“%anentity;”。

所以,问题是,我该如何调用 $oXMLWriter->writeDtdEntity以便显示“当前(所需)$sXML 输出”部分中显示的 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 方面的专家,但我注意到了一些错误:

只是一个简短的例子:

$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">
]>

关于PHP XMLWriter:我需要传递哪些参数来传递两个 XMLWriter::write IdEntity 以生成所描述的嵌套实体 DTD 声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7165644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com