我是XML编写器的新手。 知道如何使用PHP XMLWriter生成它
<definitions xmlns:tns="urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport">
我已经这样做了
$writer->startElement('definitions');
$writer->writeAttributeNS('xmlns','tns', null,'urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport');
$writer->writeAttributeNS('xmlns',null, null, 'http://schemas.xmlsoap.org/wsdl/');
$writer->writeAttributeNS('targetNamespace', null, null, 'urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport');
但是我得到了这个“警告:XMLWriter :: writeAttributeNs():”第3行和第4行中的属性名称无效
谢谢! JM
答案 0 :(得分:4)
这是xml中只有一个“普通”属性。这是targetNamespace属性。另外两个是命名空间(前缀)定义
xmlns
属性是元素及其子元素的默认命名空间定义。如果您使用startElementNS()
,则会自动创建。
targetNamespace
属性没有命名空间,可以使用writeAttribute()
设置。
示例中不需要最后xmlns:tns
,它为子元素和属性定义名称空间前缀“tns”。这里没有使用它的元素或属性。如果使用setAttributeNS()
添加它,XMLWriter也将添加xmlns命名空间。这是一个保留的命名空间(和命名空间前缀)。它内置于XML解析器中,不需要定义,但它可以。
$writer = new XMLWriter;
$writer->openURI('php://output');
$writer->startDocument('1.0', 'UTF-8');
$writer->startElementNS(
NULL,
'definitions',
'http://schemas.xmlsoap.org/wsdl/'
);
$writer->writeAttribute(
'targetNamespace',
'urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport'
);
$writer->writeAttributeNS(
'xmlns',
'tns',
'http://www.w3.org/2000/xmlns/',
'urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport'
);
$writer->endElement();
$writer->endDocument();
输出:
<definitions targetNamespace="urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport" xmlns:tns="urn:microsoft-dynamics-schemas/codeunit/SalesOrderImport" xmlns:xmlns="http://www.w3.org/2000/xmlns/" xmlns="http://schemas.xmlsoap.org/wsdl/"/>
以下是名称空间属性的示例,与startElementNS()
一样,将自动添加名称空间定义:
$writer->startElement('element');
$writer->writeAttributeNS(
'prefix',
'attr',
'urn:example:namespace',
'value'
);
$writer->endElement();
输出:
<?xml version="1.0" encoding="UTF-8"?>
<element prefix:attr="value" xmlns:prefix="urn:example:namespace"/>