在使用我的javaScript处理时,我对某些XML有问题,因为节点模块(libxslt& libxmljs)不知道如何处理自我关闭标签。通过一些不同的测试,我将问题范围缩小到了自我关闭的XML元素,例如以下示例中的中心元素:
var string =
"<head>
<body>
<example />
</body>
</head>"
简单地说,我需要一种删除
的方法<example />
完全在不知道之前的位置的情况下,因为文档中有多个位置,并且没有直接解决标签名称,因为自闭合标签因文档而异。
。如果.replace()获得参数的位置ID,则可以将其用作第二个参数。这样的东西:
string.replace('/>', function(match){
//search from match back for the closest '<' and remove that substring.
})
感谢所有建议;特别是对于@tonioyoo,他的问题解决了我的问题,下面是解决方案:
//Xml with random element tags
var xml = "<head><body><example1 /><example2 /><example3 /></body></head>"
//Convert to string
xml = xml.toString();
//Create pattern variable to match self-closing elements
var myRegexp = /.*?(<w+s*/>).*/
//Removing all problem elements
var match = myRegexp.exec(xml);
while (match != null && match[1] != null) {
xml = xml.replace(match[1], '')
match = myRegexp.exec(xml);
}
//Log result
console.log(xml);
但是,真正的问题被证明是添加的逗号,例如:
<opti,ons/>
使用节点软件包'mssql'移植到node.js时(逗号不在源SQL中),这产生了不匹配标签的错误。使用:
xml.toString();
xml.replace(<opti,ons/>, ''); //Fixes the mismatch tags error.
这意味着@quentin是正确的节点模块libxslt&amp;libxmljs确实知道如何处理自我关闭标签,因为添加的逗号是问题而不是标签。
您可以编写自己的正则表达式以捕获经典标签之间的自结尾标签或代码。
例如,如果您这样做:
var string =
"<head>
<body>
<example />
</body>
</head>"
var pattern = /<(.*) />/;
var result = string.replace(pattern, '');
您最终的字符串值等于:
<head>
<body>
</body>
</head>
,如果您想在线测试正则表达式,则可能需要访问https://regex101.com/(可以测试JavaScript语言)
希望这会有所帮助:)