From 55acc440033c5872647c6ea48fb95dfbf2b7562b Mon Sep 17 00:00:00 2001 From: yetone Date: Wed, 4 Jun 2025 01:57:08 +0800 Subject: [PATCH] fix: parse xml (#2134) --- lua/avante/libs/xmlparser.lua | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/lua/avante/libs/xmlparser.lua b/lua/avante/libs/xmlparser.lua index c210247..d4ef834 100644 --- a/lua/avante/libs/xmlparser.lua +++ b/lua/avante/libs/xmlparser.lua @@ -90,6 +90,16 @@ local function decodeEntities(str) return str end +-- 检查标签是否在行首 +local function isTagAtLineStart(xmlContent, tagStart) + -- 如果标签在整个内容的开始位置,认为是在行首 + if tagStart == 1 then return true end + + -- 检查标签前的字符,如果是换行符,则标签在行首 + local charBeforeTag = xmlContent:sub(tagStart - 1, tagStart - 1) + return charBeforeTag == "\n" +end + -- 检查是否为有效的XML标签 local function isValidXmlTag(tag, xmlContent, tagStart) -- 排除明显不是XML标签的内容,比如数学表达式 < 或 > @@ -100,6 +110,8 @@ local function isValidXmlTag(tag, xmlContent, tagStart) if tag:match("^$") then return true end -- 结束标签 if tag:match("^<[-_%w]+[^>]*/>$") then return true end -- 自闭合标签 if tag:match("^<[-_%w]+[^>]*>$") then + if not isTagAtLineStart(xmlContent, tagStart) then return false end + -- 对于开始标签,进行额外的上下文检查 local tagName = tag:match("^<([-_%w]+)")