Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 猜测XML';s架构中的根元素属性_Php_Xml_Xsd - Fatal编程技术网

Php 猜测XML';s架构中的根元素属性

Php 猜测XML';s架构中的根元素属性,php,xml,xsd,Php,Xml,Xsd,我对XML不是很感兴趣,但我必须根据XSD文件从中生成和验证一些XML文件 我创建了xml文件,但它无法验证,因为我不知道如何获取名称空间或类似的内容 我的XML文件类似于 <?xml version="1.0" encoding="utf-8"?> <REMITTable1> <reportingEntityID>CB8899899, ACE</reportingEntityID> <contractList> <

我对XML不是很感兴趣,但我必须根据XSD文件从中生成和验证一些XML文件

我创建了xml文件,但它无法验证,因为我不知道如何获取名称空间或类似的内容

我的XML文件类似于

<?xml version="1.0" encoding="utf-8"?>
<REMITTable1>
  <reportingEntityID>CB8899899, ACE</reportingEntityID>
  <contractList>
    <contract>
      <contractId>78</contractId>
      <contractName>Nombre asignado al contrato1</contractName>
      <contractType>CO</contractType>
      <energyCommodity>NG</energyCommodity>
      <fixingIndex>
        <indexName/>
        <indexValue>2.3</indexValue>
...
...

CB8899899,ACE
78
名为asignado al Contrato 1
一氧化碳
NG
2.3
...
...
我的xsd模式以

<?xml version="1.0" encoding="utf-8"?>
<!-- edited with XMLSpy v2014 rel. 2 sp1 (x64) (http://www.altova.com) by - - (Agency for the Cooperation of Energy Regulators) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ait1="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd" targetNamespace="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd" elementFormDefault="qualified">
    <xs:element name="REMITTable1">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="reportingEntityID" type="ait1:reportingEntityID">
                    <xs:annotation>
                        <xs:documentation>Field No. 6, 7</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="contractList" type="ait1:contractListType" minOccurs="0"/>
                <xs:element name="OrderList" type="ait1:OrderListType" minOccurs="0">
                    <xs:unique name="OrderRecordSeqNumber">
                        <xs:selector xpath="ait1:OrderReport"/>
                        <xs:field xpath="ait1:RecordSeqNumber"/>
                    </xs:unique>
                </xs:element>

第6、7场
我知道,有一些属性我应该添加到汇款1元素,但我不知道它们是什么。我一直在谷歌上搜索,但我不知道怎么做

有人知道我该怎么做吗?。谢谢。

通过添加

xmlns="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"
您可以将其指定为默认名称空间。还可以通过添加

xmlns:remit="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"
但是,您必须将整个xml更改为每个需要加前缀的元素

remit:

虽然我自己不喜欢使用默认名称空间,因为我认为它比使用显式名称空间更容易混淆。但是在这种情况下,更改整个XML文档并为每个元素添加前缀可能需要做很多工作。

XSD定义了一个目标名称空间,因此需要创建一个包含该名称空间的节点的XML

在DOM中,必须使用
DOMDocument::CreateElements()

输出:

<?xml version="1.0"?>
<REMITTable1 xmlns="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"/>
输出:

<?xml version="1.0"?>
<ait1:REMITTable1 xmlns:ait1="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"/>
<?xml version="1.0"?>
<REMITTable1 xmlns="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"><contractList/></REMITTable1>

名称空间节点使用与属性节点相同的语法,但如果使用名称空间感知方法,则会自动添加它们

SimpleXML有点不同。您始终必须通过加载XML来创建文档元素

$element = new SimpleXmlElement(
  '<REMITTable1 xmlns="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"/>'
);
$element->addChild('contractList', null, 'http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd');

echo $element->saveXml();
$element=新的SimpleXmlElement(
''
);
$element->addChild('contractList',null,'http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd');
echo$element->saveXml();
输出:

<?xml version="1.0"?>
<ait1:REMITTable1 xmlns:ait1="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"/>
<?xml version="1.0"?>
<REMITTable1 xmlns="http://www.acer.europa.eu/REMIT/REMITTable1_V2.xsd"><contractList/></REMITTable1>


如果不向SimpleXmlElement提供名称空间参数,它将使用父节点的名称空间。

如何创建XML?最后,我开始使用@CVests解决方案和DOMDocument。幸运的是,一个简单的查找和替换工作向所有元素添加前缀“rem:”。谢谢你们两位。