1

试图获得这样的输出

<DeclarationFile>
<Declaration Id="DEC">
<DokPVNv4>
<ParskMen>5</ParskMen>
<ParskCeturksnis xsi:nil="true"/>

不能创造<ParskCeturksnis xsi:nil="true"/>

如果只使用

$ParskCeturksnis = new SimpleXMLElement("<ParskCeturksnis></ParskCeturksnis>");
$ParskCeturksnis->addAttribute("xsi:nil", "true", "http://www.w3.org/2001/XMLSchema-instance"); 
echo $ParskCeturksnis->asXml();

所有作品

但是如果整个代码

$DOM = new DOMDocument('1.0','UTF-8');

$DeclarationFile = $DOM->createElement('DeclarationFile');
$DOM->appendChild($DeclarationFile);

$Declaration = $DOM->createElement('Declaration');
$DeclarationFile->appendChild($Declaration);
$Declaration_att = $DOM->createAttribute('Id');
$Declaration->appendChild($Declaration_att);
$att_Declaration_text = $DOM->createTextNode('DEC');
$Declaration_att->appendChild($att_Declaration_text);

$DokPVNv4 = $DOM->createElement('DokPVNv4');
$Declaration->appendChild($DokPVNv4);

$ParskMen = '5';
$ParskMen = $DOM->createElement('ParskMen',mb_convert_encoding($ParskMen, "UTF-8") );
$DokPVNv4->appendChild($ParskMen);

$ParskCeturksnis = new SimpleXMLElement("<ParskCeturksnis></ParskCeturksnis>");
$ParskCeturksnis->addAttribute("xsi:nil", "true", "http://www.w3.org/2001/XMLSchema-instance"); 
echo $ParskCeturksnis->asXml();

echo $DOM->saveXML(); 

得到错误XML Parsing Error: junk after document element

谷歌搜索,但没有找到解决方案......

试过了

 $ParskCeturksnis = $DOM->createElement('ParskCeturksnis');
 $DokPVNv4->appendChild($ParskCeturksnis)->addAttribute("xsi:nil", "true", "http://www.w3.org/2001/XMLSchema-instance");

得到XML Parsing Error: no element found

4

1 回答 1

2

您似乎混淆了 SimpleXML 和 DOM 扩展。dom_import_simplexml()虽然它们都是在同一个解析器之上实现的,并且可以使用and轻松切换simplexml_import_dom(),但这并不意味着您可以简单地调用对另一个对象创建的对象起作用的方法。

在您的情况下,您主要使用 DOM,因此您需要使用适当的 DOM 函数添加属性,特别是->createAttributeNS()->appendChild().

我认为您需要的代码是这样的:

$ParskCeturksnis = $DOM->createElement('ParskCeturksnis');
$ParskCeturksnis->appendChild($DOM->createAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:nil"));
$DokPVNv4->appendChild($ParskCeturksnis);
于 2013-08-02T23:23:31.053 回答