如何使用PHP XMLWriter向writeAttributeNS添加属性

时间:2014-05-28 11:02:06

标签: php xml xmlwriter

我是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

1 个答案:

答案 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"/>