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

C#中用LINQ查询XML,定位指定paraId的<w:tr>下的<w:p>标签

解决C# LINQ to XML解析Word文档的问题

首先要注意Word XML的命名空间,直接用"w:tr"这类字符串无法匹配节点,必须先定义对应的命名空间:

// 定义Word XML的标准命名空间
XNamespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
// 定义Office 2010扩展的命名空间(对应w14前缀)
XNamespace w14 = "http://schemas.microsoft.com/office/word/2010/wordml";

步骤1:定位目标<w:tr>节点并提取内部<w:p>节点

以下是完整的LINQ查询代码,实现筛选w14:paraId="12345"的<w:tr>,并提取其内部所有<w:p>节点:

XDocument xdc = XDocument.Parse(docText);

// 筛选符合条件的tr节点,再提取其内部所有p节点
var targetParagraphs = xdc.Root
    .Descendants(w + "tr")
    .Where(tr => tr.Attribute(w14 + "paraId")?.Value == "12345")
    .SelectMany(tr => tr.Descendants(w + "p"))
    .ToArray();

步骤2:将<w:p>节点序列化为字符串

如果需要把每个<w:p>节点转换为XML字符串,直接遍历数组调用ToString()即可:

// 转换为XML字符串数组
string[] pNodeStrings = targetParagraphs.Select(p => p.ToString()).ToArray();

代码说明

  • w + "tr":通过命名空间拼接节点名,正确匹配Word XML中的<w:tr>节点
  • Where(tr => tr.Attribute(w14 + "paraId")?.Value == "12345"):精准筛选带有指定w14:paraId属性的tr节点
  • SelectMany(tr => tr.Descendants(w + "p")):从符合条件的tr节点中提取所有后代p节点(因为p通常嵌套在<w:tc>内部)

内容的提问来源于stack exchange,提问作者Qiuzman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:33:36