[英]Regex for matching attribute values in invalid xml file
我有一些無效的XML(屬性值內的<>&“”字符)。 我需要將它們解析為C#中的正確XML文件。
我能想到的唯一方法是轉義屬性中的無效字符。 這對於<>和&(&lt;,&gt;,&amp;)正常工作。 但是,我在檢測和更改屬性內的“”時遇到了問題。
現在,我正在使用此正則表達式匹配屬性值:
/="(.*?)"
我的測試用例是這樣的:
<add sqlQuery="select blaat from test where count == "1"" test="dfsdf"/>
<add sqlQuery="select blaat from test where count == "1"" test="dfsdf" />
<add sqlQuery="select blaat from test where count == "1" and blaat > 3" test="dfsdf"/>
<add xmlDiff_action="MoveNodeFrom('1')" alias="jkhkjh" />
<add xmlDiff_action="MoveNodeFrom('1')" />
如您在測試中所見,匹配在引號“ 1”處停止
如果我將正則表達式更改為貪婪/="(.*)“,則我會匹配整行(因此在同一行中包括其他屬性)。
很難定義xml屬性的“結束引號”。 在我的測試案例中,它可以結尾為:
我知道,似乎不需要解析這個無效的xml(甚至無效的sql查詢,因為它使用雙倍空格並用==“ 1”引用。這是因為它來自另一個將所有數據保存在CDATA中的應用程序但是對於我正在做什么,我需要將該CDATA部分解析為正確的XML(轉義無效字符)
如果有人可以在RegEx或RegEx和C#的組合中解決此問題,請在此先感謝!
考慮到SQL語句應在參數內,因此可以使用捕獲的組來執行以下正則表達式:
(?<match>"((\g<match>|[^"]*))*?")(?=\s|\/|>)/gm
證明可以以某種方式起作用,但是即使嘗試這些正則表達式也很瘋狂。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.