簡體   English   中英

c#從XML標記中刪除(空)

[英]c# remove (null) from XML tags

我需要找出一種使用C#解析(NULL)的XML文件並將其從標記中刪除並將其替換為BAD

例如:

<GC5_(NULL) DIRTY="False"></GC5_(NULL)>

應該替換為

<GC5_BAD DIRTY="False"></GC5_BAD>

問題的一部分是我無法控制原始XML,我只需要在收到原始XML后對其進行修復。 第二個問題是(NULL)可以出現在零個,一個或多個標簽中。 用戶是否填寫其他字段似乎是一個問題。 所以我可能會得到

<GC5_(NULL) DIRTY="False"></GC5_(NULL)>

要么

<MH_OTHSECTION_TXT_(NULL) DIRTY="False"></MH_OTHSECTION_TXT_(NULL)>

要么

<LCDATA_(NULL) DIRTY="False"></LCDATA_(NULL)>

我是C#和編程的新手。

編輯:所以我想出了以下功能,雖然還不很漂亮,但到目前為止仍能正常工作。

public static string CleanInvalidXmlChars(string fileText)
    {
        List<char> charsToSubstitute = new List<char>();
        charsToSubstitute.Add((char)0x19);
        charsToSubstitute.Add((char)0x1C);
        charsToSubstitute.Add((char)0x1D);
        foreach (char c in charsToSubstitute)
            fileText = fileText.Replace(Convert.ToString(c), string.Empty);

        StringBuilder b = new StringBuilder(fileText);
        b.Replace("&#x0;", string.Empty);
        b.Replace("&#x1C;", string.Empty);
        b.Replace("<(null)", "<BAD");
        b.Replace("(null)>", "BAD>");

        Regex nullMatch = new Regex("<(.+?)_\\(NULL\\)(.+?)>");
        String result = nullMatch.Replace(b.ToString(), "<$1_BAD$2>");

        result = result.Replace("(NULL)", "BAD");

        return result;
    }

我只能找到6或7個錯誤的XML文件來測試此代碼,但是它對每個文件都起作用,並且沒有刪除好的數據。 感謝您的反饋和寶貴的時間。

通常,正則表達式不是處理XML文件的正確方法。 有一系列解決方案可以正確處理XML文件-您可以在System.Xml.Linq上閱讀以獲取良好的開始。 如果您是新手,那肯定是您應該在某個時候學到的東西。 但是,正如Ed Plunkett在評論中指出的那樣,您的XML實際上不是XML:XML元素名稱中不允許使用()字符。

由於您必須將其作為對字符串的操作來完成,因此要使用Corak的注釋

contentOfXml.Replace("(NULL)", "BAD");

可能是個好主意,但是如果任何元素可以包含字符串(NULL)作為其名稱以外的其他名稱,它就會中斷。

如果您想使用正則表達式,則可能效果不錯,但是我不確定它是否沒有遺漏任何邊緣情況:

var regex = new Regex(@"(<\/?[^_]*_)\(NULL\)([^>]*>)");
var result = regex.Replace(contentOfXml, "$1BAD$2");

將這個XML讀取為字符串並執行正則表達式替換是否合適? 喜歡:

Regex nullMatch = new Regex("<(.+?)_\\(NULL\\)(.+?)>");
String processedXmlString = nullMatch.Replace(originalXmlString, "<$1_BAD$2>");

暫無
暫無

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

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