2017-04-26 52 views
1

我正在使用XMLWriter编写XML。我已经能够创建PHP使用正确的名称空间和模式位置编写XML

<foo xmlns="https://www.example.com" id="1" name="test" /> 

有了:

$w=new XMLWriter(); 
$w->openMemory(); 
$w->startDocument('1.0','UTF-8'); 
$w->startElementNS(null, "foo", "https://www.example.com"); 
$w->writeAttribute("id", 1); 
$w->writeAttribute("name", "test"); 
$w->endDocument(); 
return $w->outputMemory(true); 

不过,我需要的是增加XSI和XSI:的schemaLocation,如:

<foo xmlns="https://www.example.com" id="1" name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.example.com/myschema.xsd" /> 

我试着使用此代码:

$w->writeAttributeNS("xmlns","xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/2001/XMLSchema-instance"); 

但后来我结束了w ith:

<foo xmlns="https://www.example.com" id="1" name="test" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xmlns="http://www.w3.org/2001/XMLSchema-instance" /> 

这是无效的,也不是我所需要的。

回答

2

我想通了,只是使用writeAttribute而不是writeAttributeNS

$w->writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); 
$w->writeAttribute("xsi:schemaLocation", "https://www.example.com/myschema.xsd");