MyInvois XML 阅读器:马来西亚 e-Invoice 专用
把 MyInvois 电子发票 XML 粘贴进来,像人读发票一样看:抬头、供应商、买方、税款明细、总额和每一项项目,每个值都标注它来自哪条 UBL 路径,一眼分清哪个字段是哪个。这个工具是阅读器,不是校验器,只帮你读懂文件,不作任何合规判断,文件也不会被上传。
🔒 100% 浏览器内运行 · 零服务器上传
马来西亚规则与特殊情况
电子发票 XML 是 UBL 2.1 文档:一棵带命名空间前缀的元素树,所以不管写作者给这些命名空间选了什么前缀,cbc:ID 和 cac:TaxTotal 都是同一个元素。本阅读器按元素名称后面的部分(本地名)匹配,每个值都标注 LHDN SDK 给它写的路径。下表用的是本页的示例发票:
| 人读到的内容 | 阅读器从哪里读到 |
|---|---|
发票号码 INV20261107001 | 根元素上的 cbc:ID |
| 开具日期和时间 | cbc:IssueDate、cbc:IssueTime |
发票类型代码 01 和代码列表版本 1.0 | cbc:InvoiceTypeCode 和它的 @listVersionID 属性 |
| 供应商名称、TIN、BRN、SST、MSIC 和地址 | cac:AccountingSupplierParty/…,每种识别号码用 schemeID 区分 |
| 买方名称和 TIN(买方没有 BRN) | cac:AccountingCustomerParty/… |
税款总额 37.40,然后每种税种一行小计 | cac:TaxTotal/cbc:TaxAmount 和每个 cac:TaxSubtotal |
应付金额 491.40 | cac:LegalMonetaryTotal/cbc:PayableAmount |
| 三项发票项目,其中一行是 100% 贸易折扣 | 每一项 cac:InvoiceLine |
- 这是阅读器,不是校验器。它从不说一份文件合法、合规、已接受或已拒绝,也不计算 LHDN 会不会接受它。观察清单只报告“有没有”,比如
买方 BRN:这个文件里没有,不表示这个文件应该有它。 - 金额按文件里写的原样显示。不做浮点运算,也不重算;唯一的推导数是几行的行金额之和,而且它会标注这是阅读器自己加的。
- 文件里没有的可选元素就是没有,不写 0.00。它显示为
—。空输入、不是 XML、根元素不是Invoice(贷项通知单会有自己的提示)、以及超过 2 MB 的文字,各有各的提示。 - 元素按本地名匹配。不管文件用
Cbc:ID、cbc:ID还是其他前缀写同一个命名空间,读出来的都是一样。 - 法规问题请以 LHDN 为准。LHDN 在 MyInvois SDK 站点发布电子发票结构和税种列表,这里的值标签来自这些列表,本工具不对任何文件作合规承诺。
你粘贴的内容不会离开浏览器:本页是静态 JavaScript,没有任何网络请求。
处理前后
处理前
<?xml version="1.0" encoding="UTF-8"?>
<ubl:Invoice xmlns:ubl="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2.1"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">
<cbc:ID>INV20261107001</cbc:ID>
<cbc:IssueDate>2026-11-07</cbc:IssueDate>
<cbc:IssueTime>14:35:00</cbc:IssueTime>
<cbc:InvoiceTypeCode listVersionID="1.0">01</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>MYR</cbc:DocumentCurrencyCode>
<cbc:TaxCurrencyCode>MYR</cbc:TaxCurrencyCode>
<cac:AccountingSupplierParty>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID schemeID="TIN">C12345678901</cbc:ID>
</cac:PartyIdentification>
<cac:PartyIdentification>
<cbc:ID schemeID="BRN">202501123456</cbc:ID>
</cac:PartyIdentification>
<cac:PartyIdentification>
<cbc:ID schemeID="SST">B16-1234567890</cbc:ID>
</cac:PartyIdentification>
<cbc:IndustryClassificationCode schemeID="MSIC">62012</cbc:IndustryClassificationCode>
<cac:PostalAddress>
<cac:AddressLine>
<cbc:Line>12, Jalan Teknologi 3/1, Taman Sains</cbc:Line>
</cac:AddressLine>
<cbc:CityName>Cyberjaya</cbc:CityName>
<cbc:PostalZone>63000</cbc:PostalZone>
<cbc:CountrySubentityCode>10</cbc:CountrySubentityCode>
<cac:Country>
<cbc:IdentificationCode>MYS</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:Contact>
<cbc:Telephone>+603-8311 0000</cbc:Telephone>
<cbc:ElectronicMail>billing@hoelee.com</cbc:ElectronicMail>
</cac:Contact>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Hoelee Enterprise</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cac:PartyIdentification>
<cbc:ID schemeID="TIN">C87654321090</cbc:ID>
</cac:PartyIdentification>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Restoran Aisyah Sdn. Bhd.</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="MYR">37.40</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="MYR">400.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="MYR">32.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>02</cbc:ID>
<cbc:Percent>8.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="MYR">54.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="MYR">5.40</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>01</cbc:ID>
<cbc:Percent>10.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="MYR">454.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="MYR">454.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="MYR">491.40</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="MYR">0.00</cbc:AllowanceTotalAmount>
<cbc:ChargeTotalAmount currencyID="MYR">0.00</cbc:ChargeTotalAmount>
<cbc:PayableRoundingAmount currencyID="MYR">0.00</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="MYR">491.40</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="MYR">400.00</cbc:LineExtensionAmount>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="MYR">32.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="MYR">400.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="MYR">32.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>02</cbc:ID>
<cbc:Percent>8.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:Item>
<cbc:Description>Website maintenance service — November 2026</cbc:Description>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listID="CLASS">030</cbc:ItemClassificationCode>
</cac:CommodityClassification>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="MYR">40.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>2</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">6</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="MYR">54.00</cbc:LineExtensionAmount>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="MYR">5.40</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="MYR">54.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="MYR">5.40</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>01</cbc:ID>
<cbc:Percent>10.00</cbc:Percent>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:Item>
<cbc:Description>IP camera 4MP — wired</cbc:Description>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listID="CLASS">022</cbc:ItemClassificationCode>
</cac:CommodityClassification>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="MYR">9.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>3</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="MYR">0.00</cbc:LineExtensionAmount>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="MYR">0.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="MYR">0.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="MYR">0.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>06</cbc:ID>
<cac:TaxScheme>
<cbc:ID schemeID="UN/ECE 5153" schemeAgencyID="6">OTH</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:AllowanceCharge>
<cbc:ChargeIndicator>false</cbc:ChargeIndicator>
<cbc:Amount currencyID="MYR">46.00</cbc:Amount>
<cbc:AllowanceChargeReason>Trade discount — end of year</cbc:AllowanceChargeReason>
</cac:AllowanceCharge>
<cac:Item>
<cbc:Description>E-commerce setup consultation</cbc:Description>
<cac:CommodityClassification>
<cbc:ItemClassificationCode listID="CLASS">022</cbc:ItemClassificationCode>
</cac:CommodityClassification>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="MYR">46.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</ubl:Invoice> 处理后
发票
发票号码:INV20261107001(cbc:ID)
开具日期:2026-11-07(cbc:IssueDate)
开具时间:14:35:00(cbc:IssueTime)
发票类型:01 — invoice(cbc:InvoiceTypeCode)
代码列表版本:1.0(cbc:InvoiceTypeCode/@listVersionID)
文件货币:MYR / 税款货币:MYR
供应商
名称:Hoelee Enterprise
TIN(schemeID=TIN):C12345678901
BRN(schemeID=BRN):202501123456
SST(schemeID=SST):B16-1234567890
MSIC:62012
地址:12, Jalan Teknologi 3/1, Taman Sains, 63000 Cyberjaya, MYS
电话:+603-8311 0000 / 电邮:billing@hoelee.com
买方
名称:Restoran Aisyah Sdn. Bhd.
TIN(schemeID=TIN):C87654321090
税款
税款总额:37.40(cac:TaxTotal/cbc:TaxAmount)
税款小计 1:应税金额 400.00,税款 32.00,02 — service-tax,8.00%
税款小计 2:应税金额 54.00,税款 5.40,01 — sales-tax,10.00%
总额
行金额:454.00 / 不含税金额:454.00 / 含税金额:491.40
应付金额:491.40(cac:LegalMonetaryTotal/cbc:PayableAmount)
行金额之和:454.00(本阅读器把文件里几行的金额自己加总而得)
发票项目
第 1 行 · 编号 1 · Website maintenance service — November 2026
030 · 10 EA · 单价 40.00 · 行金额 400.00 · 税款 32.00(02 — service-tax,8.00%)
第 2 行 · 编号 2 · IP camera 4MP — wired
022 · 6 EA · 单价 9.00 · 行金额 54.00 · 税款 5.40(01 — sales-tax,10.00%)
第 3 行 · 编号 3 · E-commerce setup consultation
022 · 1 EA · 单价 46.00 · 折扣 46.00(Trade discount — end of year)· 行金额 0.00 · 税款 0.00(06 — not-applicable)
这个文件里有什么 / 没有什么
- 供应商 TIN、BRN、SST、MSIC、地址、电话、电邮:有
- 买方名称和 TIN:有;买方 BRN、SST、NRIC:这个文件里没有
- 税款总额:有;税款小计:有 2 项;应付金额:有;发票项目:有 3 项
- 签名元素:没有 使用方法
- 把会计系统里的 XML 复制出来,粘贴进输入栏。下面的浏览器会把每个值连同它来自哪条 UBL 路径一起列出来。
- 按“开始处理”。输出栏是通俗易懂的摘要——抬头、供应商、买方、税款明细、总额和每一项项目——后面还有一份“有什么 / 没有什么”清单。“显示 UBL 路径”默认已勾选,取消勾选即可隐藏路径。“复制为”可在“纯文本”和“Markdown 表格”之间切换。
- 需要的话按“复制结果”。文件本身不会被改动,什么也不会被上传;打开网络标签页会看到零请求。
常见问题
这个工具会查我的发票是否合法或合规吗?
不会。它是阅读器:读出文件里有什么给你看,从不说一份文件合法、合规、已接受或已拒绝,也不计算 LHDN 会不会接受它。“有什么 / 没有什么”清单只报告有没有,所以“买方 BRN:这个文件里没有”是关于文件的事实,不是评判。
我手里已经有 XML,为什么还需要阅读器?
电子发票 XML 是带命名空间的元素树,人肉扫不过来:号码在 <cbc:ID>,应付金额在 <cac:LegalMonetaryTotal/cbc:PayableAmount>,每种税种一行小计。阅读器按人读发票的顺序打印出来,每个值都标注路径,打开表格之前就能一眼分清哪个字段是哪个。
哪个是 TIN、哪个是 BRN?
它们都是 <cac:PartyIdentification> 里的 <cbc:ID> 元素,靠 ID 元素上的 schemeID 属性区分:schemeID="TIN" 是税号,schemeID="BRN" 是公司注册号,schemeID="SST" 是销售税和服务税号。阅读器按文件里写的那样,把每个值旁边的 schemeID 原样列出。
为什么该有数字的地方显示的是横线?
文件里没有的可选元素就是没有,不是 0.00。阅读器不会替文件编一个看起来像金额的零。金额按文件里写的原样显示;唯一推导出来的数是几行的行金额之和,而且它会标注这是阅读器自己加的。
我的发票或买方的 TIN 会被上传吗?
不会。阅读器是浏览器里的静态 JavaScript:打开网络标签页会看到零请求。发票上带着真实的公司注册号和真实的税号,它们不会离开这台电脑。