在simplexml(php)中创建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文件

$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());
但是,当我试图验证它时,我得到的警告如下

  • 找不到DOCTYPE!仅检查XML语法
  • 没有在文档级别声明字符编码
  • 如何清除它们?XML是,使用的验证器是validator.w3.org。

    $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();`