OSDN Git Service

#28149 テンプレート名が空の不正なテンプレート呼び出しで処理が落ちていたのを修正,
[wptscs/wpts.git] / HmLib / Utilities / XmlUtils.cs
1 // ================================================================================================
2 // <summary>
3 //      XMLの処理に関するユーティリティクラスソース。</summary>
4 //
5 // <copyright file="XmlUtils.cs" company="honeplusのメモ帳">
6 //      Copyright (C) 2012 Honeplus. All rights reserved.</copyright>
7 // <author>
8 //      Honeplus</author>
9 // ================================================================================================
10
11 namespace Honememo.Utilities
12 {
13     using System;
14     using System.Text;
15     using System.Xml;
16
17     /// <summary>
18     /// XMLの処理に関するユーティリティクラスです。
19     /// </summary>
20     public static class XmlUtils
21     {
22         #region null値許容メソッド
23
24         /// <summary>
25         /// ノードが<c>null</c>の場合に空の文字列を返す<see cref="XmlNode.InnerText"/>。
26         /// </summary>
27         /// <param name="node"><see cref="XmlNode.InnerText"/>するノード。<c>null</c>も可。</param>
28         /// <returns>渡されたノードを<see cref="XmlNode.InnerText"/>した結果。<c>null</c>の場合には空の文字列。</returns>
29         public static string InnerText(XmlNode node)
30         {
31             return XmlUtils.InnerText(node, String.Empty);
32         }
33
34         /// <summary>
35         /// ノードが<c>null</c>の場合に指定された文字列を返す<see cref="XmlNode.InnerText"/>。
36         /// </summary>
37         /// <param name="node"><see cref="XmlNode.InnerText"/>するノード。<c>null</c>も可。</param>
38         /// <param name="nullStr">渡されたノードが<c>null</c>の場合に返される文字列。<c>null</c>も可。</param>
39         /// <returns>渡されたノードを<see cref="XmlNode.InnerText"/>した結果。<c>null</c>の場合には指定された文字列。</returns>
40         public static string InnerText(XmlNode node, string nullStr)
41         {
42             if (node == null)
43             {
44                 return nullStr;
45             }
46
47             return StringUtils.DefaultString(node.InnerText, nullStr);
48         }
49
50         /// <summary>
51         /// ノードが<c>null</c>の場合に空の文字列を返す<see cref="XmlNode.InnerXml"/>。
52         /// </summary>
53         /// <param name="node"><see cref="XmlNode.InnerXml"/>するノード。<c>null</c>も可。</param>
54         /// <returns>渡されたノードを<see cref="XmlNode.InnerXml"/>した結果。<c>null</c>の場合には空の文字列。</returns>
55         public static string InnerXml(XmlNode node)
56         {
57             return XmlUtils.InnerXml(node, String.Empty);
58         }
59
60         /// <summary>
61         /// ノードが<c>null</c>の場合に指定された文字列を返す<see cref="XmlNode.InnerXml"/>。
62         /// </summary>
63         /// <param name="node"><see cref="XmlNode.InnerXml"/>するノード。<c>null</c>も可。</param>
64         /// <param name="nullStr">渡されたノードが<c>null</c>の場合に返される文字列。<c>null</c>も可。</param>
65         /// <returns>渡されたノードを<see cref="XmlNode.InnerXml"/>した結果。<c>null</c>の場合には指定された文字列。</returns>
66         public static string InnerXml(XmlNode node, string nullStr)
67         {
68             if (node == null)
69             {
70                 return nullStr;
71             }
72
73             return StringUtils.DefaultString(node.InnerXml, nullStr);
74         }
75
76         /// <summary>
77         /// ノードが<c>null</c>の場合に空の文字列を返す<see cref="XmlNode.OuterXml"/>。
78         /// </summary>
79         /// <param name="node"><see cref="XmlNode.OuterXml"/>するノード。<c>null</c>も可。</param>
80         /// <returns>渡されたノードを<see cref="XmlNode.OuterXml"/>した結果。<c>null</c>の場合には空の文字列。</returns>
81         public static string OuterXml(XmlNode node)
82         {
83             return XmlUtils.OuterXml(node, String.Empty);
84         }
85
86         /// <summary>
87         /// ノードが<c>null</c>の場合に指定された文字列を返す<see cref="XmlNode.OuterXml"/>。
88         /// </summary>
89         /// <param name="node"><see cref="XmlNode.OuterXml"/>するノード。<c>null</c>も可。</param>
90         /// <param name="nullStr">渡されたノードが<c>null</c>の場合に返される文字列。<c>null</c>も可。</param>
91         /// <returns>渡されたノードを<see cref="XmlNode.OuterXml"/>した結果。<c>null</c>の場合には指定された文字列。</returns>
92         public static string OuterXml(XmlNode node, string nullStr)
93         {
94             if (node == null)
95             {
96                 return nullStr;
97             }
98
99             return StringUtils.DefaultString(node.OuterXml, nullStr);
100         }
101
102         #endregion
103
104         #region エンコード/デコード
105
106         /// <summary>
107         /// 指定された文字列をXMLエンコードする。
108         /// </summary>
109         /// <param name="s">エンコードする文字列。</param>
110         /// <returns>エンコードした文字列。</returns>
111         /// <exception cref="ArgumentNullException">文字列が<c>null</c>。</exception>
112         /// <remarks>
113         /// 使う場所によってはエンコードが必要ない文字もあるが、汎用のため常時
114         /// &lt;, &gt;, &quot;, &apos;, &amp; の5文字を変換する。
115         /// </remarks>
116         public static string XmlEncode(string s)
117         {
118             return Validate.NotNull(s, "s").Replace("&", "&amp;").Replace("<", "&lt;")
119                 .Replace(">", "&gt;").Replace("\"", "&quot;").Replace("\'", "&apos;");
120         }
121
122         /// <summary>
123         /// 指定された文字列をXMLデコードする。
124         /// </summary>
125         /// <param name="s">エンコードされた文字列。</param>
126         /// <returns>エンコードを解除した文字列。</returns>
127         /// <exception cref="ArgumentNullException">文字列が<c>null</c>。</exception>
128         /// <remarks>
129         /// &lt;, &gt;, &quot;, &apos;, &amp; の5文字を変換する。
130         /// </remarks>
131         public static string XmlDecode(string s)
132         {
133             return Validate.NotNull(s, "s").Replace("&lt;", "<").Replace("&gt;", ">")
134                 .Replace("&quot;", "\"").Replace("&apos;", "\'").Replace("&amp;", "&");
135         }
136
137         #endregion
138     }
139 }