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

如何在C#中使用XDocument读取XML中的<?Insert-Table?>标签

如何用XDocument读取XML中的处理指令(PI)

你碰到的<?Insert-Table ID="hebz-9780192893512-chapter-1-tableGroup-1"?>不是普通XML元素,而是XML处理指令(Processing Instruction,简称PI)。XDocument能正常加载这类节点,但不能用读取普通元素的方法(比如Elements())获取,得专门针对PI节点处理。

具体实现步骤

  • 加载XML文档:用XDocument.Load()或XDocument.Parse()加载文件,PI节点会被完整保留在文档结构里。
  • 筛选PI节点:遍历文档的所有节点,筛选出XProcessingInstruction类型的对象,再根据目标名称(比如Insert-Table)过滤。
  • 解析PI参数:PI的属性内容存在Data属性里,需要自己解析(比如用正则或字符串处理)提取ID这类参数。

代码示例

// 加载XML文档
XDocument doc = XDocument.Load("你的XML文件路径.xml");

// 筛选所有Insert-Table类型的处理指令
var insertTablePIs = doc.DescendantNodes()
    .OfType<XProcessingInstruction>()
    .Where(pi => pi.Target == "Insert-Table");

// 遍历并解析每个PI的ID参数
foreach (var pi in insertTablePIs)
{
    // 用正则匹配ID属性值
    var idMatch = System.Text.RegularExpressions.Regex.Match(pi.Data, @"ID=""([^""]+)""");
    if (idMatch.Success)
    {
        string tableId = idMatch.Groups[1].Value;
        Console.WriteLine($"找到Insert-Table,ID: {tableId}");
    }
}

补充说明

  • XProcessingInstruction.Target:对应<?后面的指令名称(比如这里的Insert-Table)。
  • XProcessingInstruction.Data:存储指令后的所有属性内容,因为PI没有严格的XML属性规范,所以需要自己解析参数。如果参数格式固定,也可以写简单的字符串分割逻辑替代正则。
  • 如果需要创建或修改PI,直接实例化XProcessingInstruction对象(比如new XProcessingInstruction("Insert-Table", "ID=\"new-table-id\"")),再添加到文档的对应节点下即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:00:09