javascript - 正则表达式:Javascript、XML、字符串
问题描述
我在变量中有以下数据。
<ctx>
<PostCode>XXXXXX</PostCode>
<Title1>Mr</Title1>
<Name>John</Name>
<Order1>£100.00</Order1>
<Order2>£100.01</Order2>
<Date>10/10/2010</Date
</ctx>
使用以下正则表达式var payload = ctx.toString().match(/Order[1-9]/g);
我得到以下结果
订单 1、订单 1、订单 2、订单 2
我怎样才能让它停在 Order1, Order2 就像计算第二个结束标签一样,我也不能使用<Order[1-9]>
(开始标签),因为我的应用程序不允许我捕获标签<>
。基本上是一个返回唯一值的正则表达式。
解决方案
永远不要使用正则表达式解析 XML。 错误的工作工具——导致脆弱的解决方案。
相反,使用真正的 XML 解析器或 XPath。
例如,这个 XPath,
//*[starts-with(local-name(), 'Order')]
将稳健地选择名称以 . 开头的所有元素"Order"
。
在浏览器的 JavaScript 中,XPath 表达式通过以下方式求值document.evaluate
:
var orders = document.evaluate('//Order[starts-with(local-name(), 'Order')]', document,
null, XPathResult.ANY_TYPE, null );
var thisOrder = orders.iterateNext();
while (thisOrder) {
console.log(thisOrder.textContent);
thisOrder = orders.iterateNext();
}
另请参阅如何使用 document.evaluate() 和 XPath 获取元素列表?
要解析存储在字符串中的 XML,请参见示例:
推荐阅读
- laravel - nignx不工作try_files css js(laravel)
- firebase - firebase auth 在 signInWithPhoneNumber 上返回 null
- c++ - 如何要求密码才能关闭窗口?
- sql-server - 将 Oracle CLOB 列转换为 Microsoft SQL varchar max
- amazon-web-services - 基于事件触发的 AWS Batch
- java - SocketChannel 是否必须在应用程序关闭时显式关闭?
- pyspark - pyspark 生成特定列的行哈希并将其添加为新列
- c++ - 如何设置 QListWidget 第一项/最后一项的样式?
- c# - 使用标准验证 pt2 导入主数据
- html - 将鼠标悬停在不是后代的工具提示上时保持悬停样式