You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 20:31:02