如何使用php创建基于模式的xml文档?

时间:2011-02-09 06:59:13

标签: php xml xsd

我想根据用户提供的数据创建一个xml文件。

我可以使用simplexml或DOMDocument来创建xml文件,甚至在DOMDocument中有一个选项来验证带有模式的xml文档。

但我需要的是不是创建节点并使用xml类添加值,我可以从存储在其他地方的数据创建一个xml文件吗?

我认为在.net中有一个从数据集读取写入xml的选项..但我在PHP中找不到这样的东西。

这是可能的,是否有任何课程?

如果没有预定义的类,至少在任何方法上有任何帮助吗?

修改

我正在编辑这个问题,因为似乎有些人不清楚我的要求..

例如,如果架构是

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
attributeFormDefault="unqualified">
<xs:element name="formpatterns">
<xs:element name="pan" type="pantype"/>
<xs:element name="name" type="nametype"/>
<xs:element name="fatherName" type="nametype"/>
<xs:group ref="address"/>
<xs:element name="dob" type="xs:date"/>
</xs:schema>

然后用户给出pan,name,fathername,address,dob的数据 我需要通过匹配架构和数据自动创建xml文档。

架构可能会不时更改,因此我不想编辑所有代码来创建/更改节点和属性。我只需要指出新的模式,以便代码根据它创建xml。

3 个答案:

答案 0 :(得分:1)

看一下https://github.com/moyarada/XSD-to-PHP它从XSD编译PHP绑定,然后你可以将PHP类序列化为XML。

答案 1 :(得分:0)

你的问题没有一个简单的答案。它可以通过元编程来完成,但它会很长。实际上,XSD越复杂,代码就越长。但是,如果使用带有原始xs:*类型的简单XSD,则很容易将PHP类型的转换器定义为XML字符串。

通过解析XSD,您可以动态创建一个数组,看起来像这个硬编码的数据:

$meta = array(
  'name' => 'xs:string',
  'dob' => 'xs:date'
  );

如果您的用户输入类似于:

$input = array(
  'name' => 'Name',
  'dob' => new DateTime('30 years ago')
  );

然后你可以动态生成:

$output = array(  
  'name' => convert( $input['name'] , $meta['name'] ),  
  'dob' => convert( $input['dob'] , $meta['dob'] )  
  );  

关键是转换功能。通过使用'instanceof'运算符和'is_ *'函数,您可以确定第一个参数的数据类型。因此,您所要做的就是为每种可能的组合返回XML转义字符串:

php string --> xml 'xs:string'  
php DateTime --> xml 'xs:date' 

...

然后可以直接创建最终的XML。

答案 2 :(得分:-1)

如果您想使用PHP的DOM函数创建XML文件,我认为this可以帮助您