假设表列中有以下 XML:
假设表列中有以下 XML:
<UserFields>
<UserField>
<Name>UserName</Name>
<Value>test_user</Value>
</UserField>
<UserField>
<Name>Age</Name>
<Value>24</Value>
</UserField>
<UserField>
<Name>Password</Name>
<Value>test1234!</Value>
</UserField>
<UserField>
<Name>AgentPassword</Name>
<Value>1234Test!</Value>
</UserField>
</UserFields>
<ActionAttributes>
<Action>
<Name>LoginPassword</Name>
<Value>Test123!</Value>
</Action>
</ActionAttributes>
我想查询 XML 以查找任何具有 <Name>
包含该单词 text()
的节点 password
,并将节点的文本替换 <Value>
为星号。在示例中,将有三次替换,最终我会得到以下 XML。
<UserFields>
<UserField>
<Name>UserName</Name>
<Value>test_user</Value>
</UserField>
<UserField>
<Name>Age</Name>
<Value>24</Value>
</UserField>
<UserField>
<Name>Password</Name>
<Value>********</Value>
</UserField>
<UserField>
<Name>AgentPassword</Name>
<Value>********</Value>
</UserField>
</UserFields>
<ActionAttributes>
<Action>
<Name>LoginPassword</Name>
<Value>********</Value>
</Action>
</ActionAttributes>
我想出了这个:
SET @MyDoc.modify('
replace value of (//UserField[Name="Password"]/Value/text())[1]
with "********"
');
该代码的问题是:
<Name>
因此它只能找到“密码”而不是其他变体。
如果用英语来说,我会说:
\'对于具有 <Name>
和 <Value>
子节点的任何节点。 如果子节点 <Name>
包含单词“密码”,则 <Value>
用星号替换子节点的文本。\'