C#中處理保留特定XML tag的函數設計

 


在一段XML內文中倘若我們有需要保留特定幾個Tag

比如下列這一段

1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend! <sub>3</sub> test </body>
</note>


假設今天我想保留擷取的XML內文中也要包含sub tag則
此時我們不能直接透過 .InnerText來擷取
因為只會取的到純文字內文

這時可以藉由.InnerXML傳入後
將目標要保留的tag關鍵字改用全形進行替換之後再自行串根結點(避免多重根結點違反XML規則的突發狀況)間接再去取XML 純文字內文即可將該sub tag保留

如下code

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
static string GetKeepSpecificXmlTagStr(string XmlContent)
{
    XmlContent = System.Text.RegularExpressions.Regex.Replace(XmlContent, "<sub>", "<sub>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    XmlContent = System.Text.RegularExpressions.Regex.Replace(XmlContent, "<sub", "<sub", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    XmlContent = System.Text.RegularExpressions.Regex.Replace(XmlContent, "</sub>", "</sub>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
    XmlContent = System.Text.RegularExpressions.Regex.Replace(XmlContent, "<sub />", "<sub />", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
	
    string XmlStr = "<root>" + XmlContent + "</root>";
    XmlStr = XmlStr.Trim();
    string data = "";
    if (IsValidateXmlFormat(XmlStr))
    {
        XmlDocument XDoc = new XmlDocument();
        XDoc.LoadXml(XmlStr);
        data = XDoc.InnerText;
    }
    else
    {
        data = XmlContent;
    }
    return data;
}

static bool IsValidateXmlFormat(string xml_content)
{
	bool ret_flag = true;
    try
    {
        new XmlDocument().LoadXml(xml_content);
    }
    catch (Exception ex)
    {
        ret_flag = false;
    }
    return ret_flag;
}









留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header