我有一个列给我这样的行:
protected void RadGrid1_Init(object sender, System.EventArgs e)
{
GridFilterMenu menu = RadGrid1.FilterMenu;
int i = 0;
while (i < menu.Items.Count)
{
if (menu.Items[i].Text == "NoFilter" || menu.Items[i].Text == "Contains" || menu.Items[i].Text == "EqualTo" || menu.Items[i].Text == "GreaterThan" || menu.Items[i].Text == "LessThan")
{
i++;
}
else
{
menu.Items.RemoveAt(i);
}
}
}
其中的所有数字都是可变的,BLA BLA也是可变的。我想要的是一个只给我的选择
<?xml version="1.0" encoding="UTF-8"?>
<xSettings>
<systemPropertyName>BLALBLA</systemPropertyName>
<minimumAmount>198.00</minimumAmount>
<closingAmount>198.00</closingAmount>
<useThisSetting>true</useThisSetting>
<SystemStep dayAfterPrevious="0">
<System SystemService="1" minimumAmount="450.00" />
</SystemStep>
<SystemStep dayAfterPrevious="8">
<message />
</SystemStep>
<SystemStep dayAfterPrevious="3">
<block />
</SystemStep>
<SystemStep dayAfterPrevious="1">
<message />
</SystemStep>
<SystemStep dayAfterPrevious="7">
<message />
</SystemStep>
</xSettings>
虽然这会更好:
<minimumAmount>198.00</minimumAmount>
基本上,我无法弄清楚如何使用regexp_substr来查找特定字符串,然后返回一个数字,之后可能是1到4位数,并且后面有两位小数。
答案 0 :(得分:3)
不要使用正则表达式来解析XML数据 - 使用正确的XML解析器:
SELECT x.minimumAmount
FROM your_table t,
XMLTable(
'/xSettings',
PASSING XMLType( t.your_column )
COLUMNS minimumAmount NUMBER(5,2) PATH './minimumAmount'
) x
或者
SELECT TO_NUMBER(
EXTRACTVALUE( XMLType( your_column ), '/xSettings/minimumAmount' )
) AS minimumAmount
FROM your_table
答案 1 :(得分:0)
不应使用正则表达式查询XML数据,但在此处:
select
regexp_substr(col, '<minimumAmount>(.*)</minimumAmount>',1,1,null,1) minimum_amount
from your_table;
另一种方法是像这样使用regexp_replace
:
select
regexp_replace(col, '.*<minimumAmount>(.*)</minimumAmount>.*','\1') minimum_amount
from your_table;