XML电子发票号码提取器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_9355e276/shdskill23。
技能介绍
问题背景
XML 格式的电子发票(增值税电子普通发票、增值税电子专用发票、全电发票等)在归档或入账前,常需要把发票号码汇总成一张清单。手工逐个打开文件、复制号码既慢又容易出错,而不同票种的 XML 结构并不统一:发票号码可能藏在 fphm、InvoiceNo、EInvoiceNumber 这类标签里,也可能只出现在某个属性的 value 中。更隐蔽的坑是 Excel:20 位的全电发票号码一旦被识别成数字,会直接变成科学计数法,前导零也会被吃掉。
工作方式
这个技能的核心是一个本地 HTML 工具,运行时不依赖外部服务。触发后它会把 extract_xml_invoice.html 复制到当前工作目录并在内置浏览器面板中打开,后续全部操作都在页面上完成。
发票号码识别按固定优先级回退,逐级放宽匹配条件:
- 标签文本匹配:扫描所有元素,匹配标签名含 invoice、发票、fp、no、编号、fpdm、fphm 等关键词的元素,且文本是 6–30 位字母数字组合
- 标签属性匹配:若标签属性(
invoiceNo、EInvoiceNumber、发票号码等)符合号码格式,优先采用属性值 - XPath 路径回退:尝试
//Invoice/InvoiceNo、//fphm、//EInvoice//EInvoiceNumber等常见路径 - 通用属性回退与文件名回退:从任意元素属性中找号码;全电发票文件名通常含 20 位数字,可作为兜底
- 通用文本回退:取第一个符合格式的元素文本
解析结果以 Excel 明细表输出,列为序号、文件名、发票号码、XML 标签、状态。其中发票号码列强制写为文本格式,专门用于保住 20 位号码和前导零。
适用边界
这套逻辑本质上是启发式扫描,不解析发票的完整业务语义。如果某个票种的 XML 使用了完全未见的命名(既无关键词、也无常见属性),只能依赖通用文本回退,存在误匹配的风险——建议对结果抽查校验。另外,它只提取发票号码,不校验号码的合法性与真伪,也不做票种区分。
使用场景
- 财务收到一批增值税电子发票XML,需要把分散在各标签里的发票号码汇总成一张Excel表
- 批量归档全电发票时,要从文件名或XML字段中找回20位发票号码,避免被Excel转成科学计数法
- 发票号码散落在`fphm`、`InvoiceNo`等多个XML结构中,需要按优先级规则自动识别并导出明细
- 需要核对一批XML发票的发票号码提取结果,输出中要能看出每个号码对应的XML标签和状态
适合人员
- 需要批量汇总XML电子发票号码的财务人员,希望减少手工打开文件复制号码的时间
- 处理发票归档的运营或档案管理员,需要把发票号码导出为文本格式的Excel明细表
- 开发内部报销或财务系统的工程师,需要参考发票号码的XML识别规则做数据清洗
- 经常处理全电发票的税务或合规人员,需要在申报前核对发票号码是否被正确提取