【问题标题】:How do you remove from /> back to < and everything in between? (Javascript)你如何从 /> 中删除回到 < 以及介于两者之间的所有内容? (Javascript)
【发布时间】:2017-04-23 11:09:39
【问题描述】:

我在使用 Javascript 处理 XML 时遇到了问题,因为 Node 模块(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.
})

【问题讨论】:

  • 找到一个确实理解自闭合标签并且忘记尝试对 XML 内容使用正则表达式的 XML 解析器。
  • “Node 模块(libxslt 和 libxmljs)不知道如何处理自闭标签”——他们知道。你使用它们的方式一定有问题。
  • "在下面的示例中" — 不会编译。 SyntaxError: 无效或意外的令牌
  • There must be something wrong with how you are using them - 也许 OP 可以展示他如何使用它们,从而避免 summoning zalgo 的诱惑

标签: javascript xml replace node-modules


【解决方案1】:

感谢大家的建议;特别是@Tonioyoyo,他解决了我的问题,解决方案如下:

//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”从 SQL 移植到 Node.js 时(逗号不在源 SQL 中),这会产生不匹配标签错误。使用:

xml.toString();
xml.replace(<opti,ons/>, ''); //Fixes the mismatch tags error.

这意味着@Quentin 是正确的,Node 模块 libxslt 和 libxmljs 确实知道如何处理自闭合标签,因为添加的逗号不是标签的问题。

【讨论】:

    【解决方案2】:

    您可以编写自己的正则表达式来捕获自闭合标签或经典标签之间的代码。

    例如,如果你这样做:

    var string = 
    "<head>
        <body>
           <example />
        </body>
    </head>"
    
    var pattern = /<(.*) \/>/;
    var result = string.replace(pattern, '');
    

    你的字符串值最终会等于:

    <head>
        <body>
    
        </body>
    </head>
    

    如果你想在线测试你的正则表达式,你可以访问https://regex101.com/(你可以测试Javascript语言)

    希望这会有所帮助:)

    【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2016-11-06
    • 2012-05-16
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2011-02-11
    相关资源
    最近更新 更多