在simplexml(php)中创建XML
我尝试使用下面的代码创建一个XML文件在simplexml(php)中创建XML,php,xml,simplexml,w3c-validation,Php,Xml,Simplexml,W3c Validation,我尝试使用下面的代码创建一个XML文件 $xml = new SimpleXMLElement('<xml />'); while($rs = db_fetch_object($d_res)){ $cmp = $xml->addChild('Company'); $cmp->addChild('ID', $rs->nid); $cmp->addChild('Name', trim($rs->title)); $cmp->addChild('
$xml = new SimpleXMLElement('<xml />');
while($rs = db_fetch_object($d_res)){
$cmp = $xml->addChild('Company');
$cmp->addChild('ID', $rs->nid);
$cmp->addChild('Name', trim($rs->title));
$cmp->addChild('Created', $rs->created);
$cmp->addChild('Updated', $rs->changed);
}
header("Content-type: text/xml;charset=utf-8;");
print($xml->asXML());
$xml=新的SimpleXMLElement(“”);
而($rs=db_fetch_object($d_res)){
$cmp=$xml->addChild('Company');
$cmp->addChild('ID',$rs->nid);
$cmp->addChild('Name',trim($rs->title));
$cmp->addChild('Created',$rs->Created);
$cmp->addChild('Updated',$rs->changed);
}
标题(“内容类型:text/xml;字符集=utf-8;”;
打印($xml->asXML());
但是,当我试图验证它时,我得到的警告如下
$XML=new simplexmlement(“”);
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?>');
尽管这些警告可能会被忽略,但尝试修复它们确实是一个好主意
第一条消息表示xml文件没有指定任何DTD;第二个是指xml指令不包含任何编码属性这一事实
不幸的是,从simplexml API来看,添加这两个API都是不可能的(尽管我可能遗漏了一些东西,因为不熟悉它)。我想,由于“简单”,它非常适合快速读取xml文件,但不太适合生成xml。你可能不得不转向稍微“重”一点的东西,比如。你可以决定忽略这些警告。XML中既不需要DOCTYPE,也不需要声明的字符编码。实际上,大多数XML文档不包含DOCTYPE DOCTYPE用于文档验证,这意味着存在一个正式的描述,说明您的文档可以存在哪些元素和属性,并且可以检查您的文档不包含任何其他内容(在这种情况下,文档将变得无效)。除非您关心这一点,并准备开发、托管和维护自己的DOCTYPE规范,否则请忽略此警告 大多数情况下,XML的创建者和使用者关心良好的格式,这意味着文档遵循XML的外观规则(没有交叉嵌套的标记,所有标记都必须关闭,正确转义内容)。如果做不到这一点,您的文档就会崩溃——但这里的情况并非如此 通过在文档顶部包含表示编码的XML声明,可以修复字符编码警告:
<?xml version="1.0" encoding="utf-8" ?>
如果不包括它,XML默认为“Version1.0”和“utf-8”。如果这就是你要传达的,一切都很好。如果您提供了其他内容,则必须包含该信息。您只需用下一种方法创建XML根元素:
$rootXml = new SimpleXMLElement("<!DOCTYPE your_root_xml_element SYSTEM 'URL_TO_DTD_SCHEME'><your_root_xml_element></your_root_xml_element>");
....
echo $rootXml->asXML();
$rootXml=newsimplexmlement(“”);
....
echo$rootXml->asXML();
这样,您将获得下一个有效的XML:
<?xml version="1.0"?>
<!DOCTYPE your_root_xml_element SYSTEM "URL_TO_DTD_SCHEME">
<your_root_xml_element>
</your_root_xml_element>
`$xmlstr='1
0475109067
大雅
明星
test@test.com
';
$xml=新的simplexmlement($xmlstr);
$xml->Result->Name='Xmltestfile';
$xml->asXML('test.xml');
$xml->asXML()`
这段代码将创建一个名为test的xml文件,我建议使用常规包,如DOM或XMLWriter。$xml=new SimpleXMLElement(“”);::这是宣言。。。(Shakti Singh漏掉了问号)| | | |然后::这是文档根标记(尽管将根标记命名为xml是不寻常的,但这是允许的)。
`$xmlstr = '<?xml version="1.0" encoding="utf-8"?>
<root>
<Data>
<Id>0475109067</Id>
<Contact>
<Name>Daya</Name>
<FirstName>Star</FirstName>
<Email>test@test.com</Email>
</Contact>
</Data>
<Result>
<Name></Name>
</Result>
</root>';
$xml = new SimpleXMLElement($xmlstr);
$xml->Result->Name = 'Xmltestfile';
$xml->asXML('test.xml');
$xml->asXML();`