PowerShell如何读取SQL Server扩展事件死锁XML的inputbuf标签值
如何读取指定XML中inputbuf标签的文本内容
问题背景
给定如下示例XML,需要提取inputbuf标签内的文本:
<deadlock> <process-list> <process id="123" taskpriority="123"> <inputbuf> some random string like this </inputbuf> </process> </process-list> </deadlock>
当前已掌握process节点属性的读取方法,可通过如下语句正确获取id属性值"123":
$event.Fields["xml_report"].Value.XML.SelectNodes('//deadlock/process-list/process').id
需要找到对应方法获取inputbuf标签包裹的文本,即示例中的" some random string like this "。
解决方案
直接在XPath路径中追加定位到inputbuf子节点,读取节点的text属性即可拿到标签内的原始文本,对应代码如下:
$event.Fields["xml_report"].Value.XML.SelectNodes('//deadlock/process-list/process/inputbuf').text
如果XML中存在多个process节点,需要逐个匹配对应进程的inputbuf内容,可以通过遍历节点集合的方式读取:
# 先获取所有process节点 $processList = $event.Fields["xml_report"].Value.XML.SelectNodes('//deadlock/process-list/process') foreach ($proc in $processList) { # 读取当前进程id $procId = $proc.id # 读取当前进程对应的inputbuf文本 $inputBuf = $proc.SelectSingleNode('inputbuf').text }
该读取方式会完整保留
inputbuf标签内文本首尾的空格,不会自动做裁剪,符合原始内容读取需求。
内容的提问来源于stack exchange,提问作者beehive
相关产品推荐
相关产品推荐

