@@ -79,6 +79,12 @@ public class DiffBuilder : IDifferenceEngineConfigurer<DiffBuilder> {
7979
8080 private bool ignoreECW ;
8181
82+ private bool ignoreXmlWhitespace ;
83+
84+ private bool normalizeXmlWhitespace ;
85+
86+ private bool ignoreXmlECW ;
87+
8288 private bool ignoreComments ;
8389
8490 private string ignoreCommentVersion = null ;
@@ -121,19 +127,53 @@ private static ISource GetSource(object source) {
121127 /// If you only want to remove text nodes consisting solely of
122128 /// whitespace (AKA element content whitespace) but leave all
123129 /// other text nodes alone you should use
124- /// ignoreElementContentWhitespace instead.
130+ /// <see cref="IgnoreElementContentWhitespace"/> instead.
125131 /// </para>
132+ /// <para>
133+ /// Unlike <see cref="IgnoreXmlWhitespace"/> this uses Unicode's idea
134+ /// of whitespace rather than the more restricted subset considered
135+ /// whitespace by XML.
136+ /// </para>
126137 /// </remarks>
127138 public DiffBuilder IgnoreWhitespace ( ) {
128139 ignoreWhitespace = true ;
129140 return this ;
130141 }
131142
143+ /// <summary>
144+ /// Ignore XML whitespace by removing all empty text nodes and trimming the non-empty ones.
145+ /// </summary>
146+ /// <remarks>
147+ /// <para>
148+ /// If you only want to remove text nodes consisting solely of
149+ /// whitespace (AKA element content whitespace) but leave all
150+ /// other text nodes alone you should use
151+ /// <see cref="IgnoreXmlElementContentWhitespace"/> instead.
152+ /// </para>
153+ /// <para>
154+ /// Unlike <see cref="IgnoreWhitespace"/> this uses XML's idea
155+ /// of whitespace rather than the more extensive set considered
156+ /// whitespace by Unicode.
157+ /// </para>
158+ /// <para>
159+ /// since XMLUnit 2.10.0
160+ /// </para>
161+ /// </remarks>
162+ public DiffBuilder IgnoreXmlWhitespace ( ) {
163+ ignoreXmlWhitespace = true ;
164+ return this ;
165+ }
166+
132167 /// <summary>
133168 /// Ignore element content whitespace by removing all text
134169 /// nodes solely consisting of whitespace.
135170 /// </summary>
136171 /// <remarks>
172+ /// <para>
173+ /// Unlike <see cref="IgnoreXmlElementContentWhitespace"/> this uses Unicode's idea
174+ /// of whitespace rather than the more restricted subset considered
175+ /// whitespace by XML.
176+ /// </para>
137177 /// <para>
138178 /// since XMLUnit 2.6.0
139179 /// </para>
@@ -143,6 +183,25 @@ public DiffBuilder IgnoreElementContentWhitespace() {
143183 return this ;
144184 }
145185
186+ /// <summary>
187+ /// Ignore element content whitespace by removing all text
188+ /// nodes solely consisting of XML whitespace.
189+ /// </summary>
190+ /// <remarks>
191+ /// <para>
192+ /// Unlike <see cref="IgnoreElementContentWhitespace"/> this uses XML's idea
193+ /// of whitespace rather than the more extensive set considered
194+ /// whitespace by Unicode.
195+ /// </para>
196+ /// <para>
197+ /// since XMLUnit 2.10.0
198+ /// </para>
199+ /// </remarks>
200+ public DiffBuilder IgnoreXmlElementContentWhitespace ( ) {
201+ ignoreXmlECW = true ;
202+ return this ;
203+ }
204+
146205 /// <summary>
147206 /// Normalize Text-Elements by removing all empty text nodes and normalizing the non-empty ones.
148207 /// </summary>
@@ -152,12 +211,48 @@ public DiffBuilder IgnoreElementContentWhitespace() {
152211 /// characters are replaced by space characters and
153212 /// consecutive whitespace characters are collapsed.
154213 /// </para>
214+ /// <para>
215+ /// This method is similiar to <see cref="IgnoreWhitespace"/>
216+ /// but in addition "normalizes" whitespace.
217+ /// </para>
218+ /// <para>
219+ /// Unlike <see cref="NormalizeXmlWhitespace"/> this uses Unicode's idea
220+ /// of whitespace rather than the more restricted subset considered
221+ /// whitespace by XML.
222+ /// </para>
155223 /// </remarks>
156224 public DiffBuilder NormalizeWhitespace ( ) {
157225 normalizeWhitespace = true ;
158226 return this ;
159227 }
160228
229+ /// <summary>
230+ /// Normalize Text-Elements by removing all empty text nodes and normalizing the non-empty ones.
231+ /// </summary>
232+ /// <remarks>
233+ /// <para>
234+ /// "normalized" in this context means all XML whitespace
235+ /// characters are replaced by space characters and
236+ /// consecutive XML whitespace characters are collapsed.
237+ /// </para>
238+ /// <para>
239+ /// This method is similiar to <see cref="IgnoreXmlWhitespace"/>
240+ /// but in addition "normalizes" XML whitespace.
241+ /// </para>
242+ /// <para>
243+ /// Unlike <see cref="NormalizeWhitespace"/> this uses XML's idea
244+ /// of whitespace rather than the more extensive set considered
245+ /// whitespace by Unicode.
246+ /// </para>
247+ /// <para>
248+ /// since XMLUnit 2.10.0
249+ /// </para>
250+ /// </remarks>
251+ public DiffBuilder NormalizeXmlWhitespace ( ) {
252+ normalizeXmlWhitespace = true ;
253+ return this ;
254+ }
255+
161256 /// <summary>
162257 /// Will remove all comment-Tags "<!-- Comment -->" from
163258 /// test- and control-XML before comparing.
@@ -405,9 +500,15 @@ private ISource Wrap(ISource source) {
405500 if ( ignoreWhitespace ) {
406501 newSource = new WhitespaceStrippedSource ( newSource ) ;
407502 }
503+ if ( ignoreXmlWhitespace ) {
504+ newSource = new XmlWhitespaceStrippedSource ( newSource ) ;
505+ }
408506 if ( normalizeWhitespace ) {
409507 newSource = new WhitespaceNormalizedSource ( newSource ) ;
410508 }
509+ if ( normalizeXmlWhitespace ) {
510+ newSource = new XmlWhitespaceNormalizedSource ( newSource ) ;
511+ }
411512 if ( ignoreComments ) {
412513 newSource = ignoreCommentVersion == null
413514 ? new CommentLessSource ( newSource )
@@ -416,6 +517,9 @@ private ISource Wrap(ISource source) {
416517 if ( ignoreECW ) {
417518 newSource = new ElementContentWhitespaceStrippedSource ( newSource ) ;
418519 }
520+ if ( ignoreXmlECW ) {
521+ newSource = new XmlElementContentWhitespaceStrippedSource ( newSource ) ;
522+ }
419523 return newSource ;
420524 }
421525
0 commit comments