我正在尝试剥离一个巨大的XML文件而不包含所有无用的信息。该文件看起来像这样:
App_Data App="MOD" Name="Genre" Value="Series"/><App_Data App="MOD"
Name="Show_Type" Value="Series"/><App_Data App="MOD" Name="Billing_ID"
Value="10092"/><App_Data App="MOD" Name="Licensing_Window_Start"
Value="2019-05-07 00:00:00"/><App_Data App="MOD"
Name="Licensing_Window_End" Value="2019-05-13 23:59:59"/><App_Data
App="MOD" Name="Preview_Period" Value="0"/><App_Data App="MOD"
Name="Display_As_New" Value="4"/><App_Data App="MOD"
Name="Display_As_Last_Chance" Value="7"/><App_Data App="MOD"
Name="Provider_QA_Contact" Value="NBC Universal"/><App_Data App="MOD"
Name="Suggested_Price" Value="0.00"/><App_Data App="MOD"
我将需要找到Show_Type, Licensing_Window_end, and Display_as_New
的值
因此,如何将我的输出字符串转换为以下内容:
Name="Show_Type" Value="Series"
Name="Licensing_Window_End" Value="2019-05-13 23:59:59"
Name="Display_As_New" Value="4"
目前,我有这样的事情:
stripText(text) {
return text.match(new RegExp("Show_Type" + "(.*)" + "/>"));
}
但这仅获得第一个变量。并将包含一些无用的信息,例如/>结束部分。
答案 0 :(得分:0)
从技术上讲,您可以通过#include <asm/termios.h> /* asm gives us the all important BOTHER and TCGETS2 */
#include <fcntl.h>
#include <dirent.h>
#include <stropts.h> /* Oddly, for ioctl, because ioctl.h causes include dramas */
setNonStandardBaudRateTermios(int fd, int baudrate, eParitySetting parity, int numStopBits)
{
//All the termios2/ioctl/TCGETS2/BOTHER things
}
将字符串转换为XML并以此方式循环。您将需要一些if语句来获取正确的属性。
DOMParser
答案 1 :(得分:0)
This expression可能会帮助您:
^(Name=")(Show_Type"|Licensing_Window_End"|Display_As_New")(\s+Value="[A-Za-z0-9-:\s]+")([\/>\s]+)(.*)$
为了安全起见,我添加了几个界限。如果您愿意,可以减少这些界限。我还添加了几个捕获组,以便于调用。
此图显示了表达式的工作方式:
减少边界的一种方法是删除名称值,类似于this expression:
^(Name=")([A-Za-z\s\x22_]+)(\s+Value="[A-Za-z0-9-:\s]+")([\/>\s]+)(.*)$
此JavaScript代码段使用一个简单的100万次for
循环在其中一个输入上显示了此表达式的性能,您可以使用$1$2$3
在输入上执行字符串替换。>
repeat = 1000000;
start = Date.now();
for (var i = repeat; i >= 0; i--) {
var string = 'Name="Licensing_Window_End" Value="2019-05-13 23:59:59"/><App_Data';
var regex = /^(Name=")(Show_Type"|Licensing_Window_End"|Display_As_New")(\s+Value="[A-Za-z0-9-:\s]+")([\/>\s]+)(.*)$/g;
var match = string.replace(regex, "$1$2$3");
}
end = Date.now() - start;
console.log("YAAAY! \"" + match + "\" is a match ");
console.log(end / 1000 + " is the runtime of " + repeat + " times benchmark test. ");
答案 2 :(得分:0)
建议先使用xml解析器,然后删除所需的字段,然后再次保存xml。我不建议您使用文本字符串搜索来删除XML字段,因为xml是结构化数据,应使用正确的工具完成正确的工作。
答案 3 :(得分:0)
我认为它必须可行:
const text = `App_Data App="MOD" Name="Genre" Value="Series"/><App_Data App="MOD"
Name="Show_Type" Value="Series fasfdasdf"/><App_Data App="MOD" Name="Billing_ID"
Value="10092"/><App_Data App="MOD" Name="Licensing_Window_Start"
Value="2019-05-07 00:00:00"/><App_Data App="MOD"
Name="Licensing_Window_End" Value="2019-05-13 23:59:59"/><App_Data
App="MOD" Name="Preview_Period" Value="0"/><App_Data App="MOD"
Name="Display_As_New" Value="4"/><App_Data App="MOD"
Name="Display_As_Last_Chance" Value="7"/><App_Data App="MOD"
Name="Provider_QA_Contact" Value="NBC Universal"/><App_Data App="MOD"
Name="Suggested_Price" Value="0.00"/><App_Data App="MOD"`
const result = text.match(/[Nn]ame\="(Show_Type|Licensing_Window_End|Display_As_New)"\s+[Vv]alue\="[^"]*"/g)
console.log(result)
我不知道您将如何使用这些数据,但是您可能会发现一个有用的由对象表示的模型,其中属性“名称”是键,属性“ values”是值的数组(我重复字符串共享并更改重复值以获得更好的示例):
const text = `App_Data App="MOD" Name="Genre" Value="Series"/><App_Data App="MOD"
Name="Show_Type" Value="Series"/><App_Data App="MOD" Name="Billing_ID"
Value="10092"/><App_Data App="MOD" Name="Licensing_Window_Start"
Value="2019-05-07 00:00:00"/><App_Data App="MOD"
Name="Licensing_Window_End" Value="2019-05-13 23:59:59"/><App_Data
App="MOD" Name="Preview_Period" Value="0"/><App_Data App="MOD"
Name="Display_As_New" Value="4"/><App_Data App="MOD"
Name="Display_As_Last_Chance" Value="7"/><App_Data App="MOD"
Name="Provider_QA_Contact" Value="NBC Universal"/><App_Data App="MOD"
Name="Suggested_Price" Value="0.00"/><App_Data App="MOD"
App_Data App="MOD" Name="Genre" Value="Series"/><App_Data App="MOD"
Name="Show_Type" Value="Series 2"/><App_Data App="MOD" Name="Billing_ID"
Value="10092"/><App_Data App="MOD" Name="Licensing_Window_Start"
Value="2019-05-07 00:00:00"/><App_Data App="MOD"
Name="Licensing_Window_End" Value="2020-05-13 00:59:59"/><App_Data
App="MOD" Name="Preview_Period" Value="0"/><App_Data App="MOD"
Name="Display_As_New" Value="15"/><App_Data App="MOD"
Name="Display_As_Last_Chance" Value="7"/><App_Data App="MOD"
Name="Provider_QA_Contact" Value="NBC Universal"/><App_Data App="MOD"
Name="Suggested_Price" Value="0.00"/><App_Data App="MOD"
`
const result = text.match(/[Nn]ame\="(Show_Type|Licensing_Window_End|Display_As_New)"\s+[Vv]alue\="[^"]*"/g)
const objectResult = {
show_type: [],
licensing_window_end: [],
display_as_new: [],
}
result.forEach((e)=>{
const nameAndValue = e.match(/[Nn]ame\="(Show_Type|Licensing_Window_End|Display_As_New)"\s+[Vv]alue\="([^"]*)"/)
switch (nameAndValue[1]) {
case "Show_Type":
objectResult.show_type.push(nameAndValue[2])
break;
case "Licensing_Window_End":
objectResult.licensing_window_end.push(nameAndValue[2])
break;
case "Display_As_New":
objectResult.display_as_new.push(nameAndValue[2])
break;
default:
break;
}
})
console.log(objectResult)