簡體   English   中英

正則表達式,用於匹配無效xml文件中的屬性值

[英]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”處停止

如果我將正則表達式更改為貪婪/="(.*)“,則我會匹配整行(因此在同一行中包括其他屬性)。

帶有貪婪的RegEx測試鏈接:

很難定義xml屬性的“結束引號”。 在我的測試案例中,它可以結尾為:

  • “ (空間)
  • “/>
  • “ otherAttribute =” value“

我知道,似乎不需要解析這個無效的xml(甚至無效的sql查詢,因為它使用雙倍空格並用==“ 1”引用。這是因為它來自另一個將所有數據保存在CDATA中的應用程序但是對於我正在做什么,我需要將該CDATA部分解析為正確的XML(轉義無效字符)

如果有人可以在RegEx或RegEx和C#的組合中解決此問題,請在此先感謝!

考慮到SQL語句應在參數內,因此可以使用捕獲的組來執行以下正則表達式:

(?<match>"((\g<match>|[^"]*))*?")(?=\s|\/|>)/gm

證明可以以某種方式起作用,但是即使嘗試這些正則表達式也很瘋狂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM