我想根据用户提供的数据创建一个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。
答案 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可以帮助您