diff options
author | Joel Martinez <joelmartinez@gmail.com> | 2020-03-06 00:37:08 +0300 |
---|---|---|
committer | Joel Martinez <joelmartinez@gmail.com> | 2020-03-06 21:34:30 +0300 |
commit | f867c532572299242d41019dd28b7e6028bcaa84 (patch) | |
tree | f4652ac9c4892d17dd0831e9be464d33c17b1a1b | |
parent | a3391fe4141ef37b28a07837e4bea938a51ca3d2 (diff) |
[import] fixed issue with xpathmdoc-5.7.5.1
-rw-r--r-- | mdoc/Mono.Documentation/Updater/DocUtils.cs | 26 | ||||
-rw-r--r-- | mdoc/mdoc.Test/DocUtilsTests.cs | 35 |
2 files changed, 57 insertions, 4 deletions
diff --git a/mdoc/Mono.Documentation/Updater/DocUtils.cs b/mdoc/Mono.Documentation/Updater/DocUtils.cs index 8af7befd..16101987 100644 --- a/mdoc/Mono.Documentation/Updater/DocUtils.cs +++ b/mdoc/Mono.Documentation/Updater/DocUtils.cs @@ -5,7 +5,7 @@ using System.IO; using System.Linq;
using System.Text;
using System.Xml;
-
+using System.Xml.XPath;
using Mono.Cecil;
using Mono.Collections.Generic;
using Mono.Documentation.Util;
@@ -265,6 +265,8 @@ namespace Mono.Documentation.Updater {
if (n is XmlText && n.InnerText == "To Be Added.")
return false;
+ else if (n is XmlComment)
+ return false;
else
{
bool removed = true;
@@ -272,14 +274,32 @@ namespace Mono.Documentation.Updater {
if (nchild == null) continue;
+ if (nchild is XmlComment || nchild is XmlText || nchild is XmlCDataSection)
+ {
+ nchild.ParentNode.RemoveChild(nchild);
+ removed = true;
+ continue;
+ }
+
if (depth == 0)
{
// check the first level children to see if there's an incoming node that matches
var avalues = nchild.Attributes?.Cast<XmlAttribute>().Select(a => $"@{a.Name}='{a.Value}'").ToArray();
var nodexpath = $"./{nchild.Name}";
if (avalues?.Length > 0)
- nodexpath += $"[{ string.Join(" AND ", avalues) }]";
- var incomingEquivalent = incoming.SelectSingleNode(nodexpath);
+ nodexpath += $"[{ string.Join(" and ", avalues) }]";
+
+ XmlNode incomingEquivalent;
+
+ try
+ {
+ incomingEquivalent = incoming.SelectSingleNode(nodexpath);
+ }
+ catch (XPathException xex)
+ {
+ throw new MDocException($"xpath error: {nodexpath}. On incoming node {incoming.OuterXml}", xex);
+ }
+
if (incomingEquivalent != null)
{
nchild.ParentNode.RemoveChild(nchild);
diff --git a/mdoc/mdoc.Test/DocUtilsTests.cs b/mdoc/mdoc.Test/DocUtilsTests.cs index d5f01a05..dad76d0e 100644 --- a/mdoc/mdoc.Test/DocUtilsTests.cs +++ b/mdoc/mdoc.Test/DocUtilsTests.cs @@ -65,7 +65,40 @@ namespace mdoc.Test XmlDocument incomingDoc = new XmlDocument(); incomingDoc.LoadXml(xml2); DocUtils.ClearNodesIfNotDefault(doc.FirstChild, incomingDoc.FirstChild); - Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 3) ; + Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 3); + } + + [Test] + public void TestNodeCleaner2() + { + string xml = @"<Docs> + <summary>To be added.</summary> + <param name=""one"" name2=""n2"">To be added.</param> +<!-- this is an xml comment --> + <param name=""two"">written docs</param> +random text +<param name=""three"">Written but not provided</param> +<![CDATA[ + for some reason +]]> +</Docs>"; string xml2 = @"<Docs> + <summary>new summary</summary> +<!-- this is another xml comment --> + <param name=""one"" name2=""n2"">To be added.</param> + random text + <param name=""two"">written docs but changed</param> +<param name=""three"">Written but and</param> +<![CDATA[ + for some reason +]]> +</Docs>"; + XmlDocument doc = new XmlDocument(); + doc.LoadXml(xml); + + XmlDocument incomingDoc = new XmlDocument(); + incomingDoc.LoadXml(xml2); + DocUtils.ClearNodesIfNotDefault(doc.FirstChild, incomingDoc.FirstChild); + Assert.IsTrue(doc.FirstChild.ChildNodes.Count == 0); } } }
\ No newline at end of file |