我正在使用DOMDocument的loadXML function加载XML文档。似乎没有任何options个案例折叠DOMElement的tagName和属性名称。
我需要将XML文档视为不区分大小写,因此这应该被认为是无效的(名称和NAME应该相同,而不是唯一的):
<input name="field" NAME="field2" />
同样,getAttribute / setAttribute函数应将“NAME”和“name”视为相同的属性。
xml parser functions似乎通过xml_parser_set_option函数通过“XML_OPTION_CASE_FOLDING”常量具有此功能。但DOMDocument和这些函数似乎是互斥的,唯一的相似之处是他们都在幕后使用libxml2。
那么有没有办法强制DOMDocument进行大小写?使用xml解析器函数的替换是否有任何下降?我希望避免使用任何使用正则表达式的东西。 DOMDocument的吸引力在于对象与程序设计。
通常,XML文档节点应该是小写的。但是我希望我的代码仍能正常工作,如果有人大写某些内容并在解析文档后将其转换为小写。
答案 0 :(得分:1)
我认为在DomDocument类中没有一个特定的函数来忽略大小写(或重复数据删除属性),但是你可以在加载它之前降低相关XML部分的大小写以获得一些那边的路?
function xml_case_fold($string)
{
$string = preg_replace_callback('#(</?[^!><= ]+)([^><]*>)|(<!\[CDATA\[)(.*\]\]>)#si',
function($tag)
{
if($tag[1])
{
$tag[2] = preg_replace_callback('#([^><= ]+)(=(["\']).*?\3)#s',
function($attr)
{
return strtolower($attr[1]) . $attr[2];
}, $tag[2]);
return strtolower($tag[1]) . $tag[2];
}
else
{
return $tag[0];
}
}, $string);
return $string;
}