我想知道如何根据另一个属性的值更新XML属性吗?
在以下示例中,我要设置String x = grades.getText();
String [] grades = new String [100];
for (int i = 0; i < x.length() ;i++) {
if (x.charAt(i) == ',') {
grades[i] = x.substring(0, i);
x = x.substring(i + 1, x.length());
System.out.println(grades[i]);
i = 0;
}
}
System.out.println(x); //last x will your last element
,其中b="321"
:
a="banana"
此选择可以很好地提取所需的值,但是如何对其进行修改?
Declare @t table ( x xml )
insert into @t(x) values ('<n1><n2 a="apple" b="2" /><n2 a="banana" b="21" /></n1>')
此更新不执行任何操作...
select m.n.value('@b', 'int') from @t
outer apply x.nodes('/n1/n2') as m(n)
where m.n.value('@a', 'nvarchar(max)') = 'banana'
此更新更改了第一个节点,这不是期望的结果
update @t
set x.modify('replace value of (/n1/n2/@b)[1] with "321"')
where x.value('(n1/n2/@b)[1]', 'nvarchar(max)') = 'banana'
select * from @t
在此先感谢您的帮助...
答案 0 :(得分:1)
尝试一下
Declare @t table ( x xml )
insert into @t(x) values ('<n1><n2 a="apple" b="2" /><n2 a="banana" b="21" /></n1>');
UPDATE @t SET x.modify('replace value of (/n1/n2[@a="banana"]/@b)[1] with "321"');
SELECT * FROM @t;
简而言之:
您必须告诉您要替换的内容。在这种情况下,@b
元素中的属性<n1>
的值,其中属性@a
是“ banana”。这需要XPath
中的谓词。您的阅读方式如下:
*找到n1并在n2之下,检查属性为a
的“香蕉”之一。是的,您找到了吗?大!不接受并更改第一次出现的属性b
。