我以XML格式手动将自行车骑行记录到我的电脑中 - 并用我自己的PHP脚本解析它。
我知道我可以在代码中强制元素的位置 - 例如:
<!ELEMENT Ride (Start, Through*, Finish) >
元素Ride
具有以下属性
<!ATTLIST Ride Number CDATA #REQUIRED
Purpose CDATA #IMPLIED
Comment CDATA #IMPLIED
Date CDATA #IMPLIED >
我的问题是,如果我可以说所有这些属性只能在这个序列中 - 即使其中三个只是暗示(不是必要的)。
这样做的目的是,如果我写错了属性序列,PHP脚本就无法解析它 - 因为它只是为这个序列编写的。然后使用这种错误的属性序列不包含在导出和解析中。
用于解析乘坐的介绍数据的当前正则表达式是:
/\<Ride Number="([0-9]*)"( Purpose="([^\"]*)")?( Comment="([^\"]*)")?( Date="([^\"]*)")?\>(.*)\<\/Ride\>/sU
我还想到了那个正则表达式的变化,但它可能太长了......因此不太可读。
答案 0 :(得分:1)
正则表达式和XML不能混合使用。 XML规范声明属性序列不重要:
the order of attribute specifications in a start-tag or empty-element tag is not significant
检查XML Specification第3.1节
您需要使用PHP XML表达式而不是正则表达式。 Simple XML可能已经足够好了。
答案 1 :(得分:1)
不,XML DTD和我熟悉的任何其他XML模式语言都没有提供约束属性顺序的方法。正如stwissel已经指出的那样,XML规范说明属性的顺序并不重要。
您的选择包括:
我不会说XML和正则表达不会混合。但是,当您将正则表达式应用于XML时,您需要处理XML语法的基本事实。