Saturday, 8 September 2012

Issues relating to XML Caching - 2

After the previous fix, xml cache is still not properly refreshed. We now have after publish, one node but non @isDoc children are duplicated.
The xml going into the XML Cache file is corrupted.
Look at TransferValuesFromDocumentXmlToPublishedXml (323)
For some reason, this loop does not loop through all elements.
Change from this (328:329):


	foreach (XmlNode n in PublishedNode.SelectNodes(xpath))
PublishedNode.RemoveChild(n);
To:
XmlNode[] NodesToRemove =
(new List(PublishedNode.SelectNodes(xpath).OfType())).ToArray();
for (int i = 0; i < NodesToRemove.Length; i++)
PublishedNode.RemoveChild(NodesToRemove[i]);

This uses Linq, and we will need to add this as well: using System.Linq; (+ a reference to System.Core)


I have fixed this throughout the code but this would need to be tested.


content.cs 451:452
from
foreach (XmlNode child in parentNode.SelectNodes(xpath))
parentNode.RemoveChild(child);
to
XmlNode[] NodesToRemove =
(new List(parentNode.SelectNodes(xpath).OfType())).ToArray();
for (int i = 0; i < NodesToRemove.Length; i++)
parentNode.RemoveChild(NodesToRemove[i]);

macro.cs 953:954
from
foreach (XmlNode n in currentNode.SelectNodes("./node"))
currentNode.RemoveChild(n);
to
XmlNode[] NodesToRemove =
(new List(currentNode.SelectNodes("./node").OfType())).ToArray();
for (int i = 0; i < NodesToRemove.Length; i++)
currentNode.RemoveChild(NodesToRemove[i]);

StandardPackageActions.cs 493:500
from
foreach (XmlNode ext in xn.SelectNodes("//ext"))
{
if (ext.Attributes["alias"] != null && ext.Attributes["alias"].Value == _alias)
{
xn.RemoveChild(ext);
inserted = true;
}
}
to
XmlNode[] NodesToRemove =
(new List(xn.SelectNodes("//ext").OfType())).ToArray();
for (int j = 0; j < NodesToRemove.Length; j++)
{
if (NodesToRemove[j].Attributes["alias"] != null && NodesToRemove[j].Attributes["alias"].Value == _alias)
{
xn.RemoveChild(NodesToRemove[j]);
inserted = true;
}
}

StandardPackageActions.cs 588:595
from
foreach (XmlNode node in xn.SelectNodes("//allow"))
{
if (node.Attributes["host"] != null && node.Attributes["host"].Value == hostname)
{
xn.RemoveChild(node);
inserted = true;
}
}
to
XmlNode[] NodesToRemove =
(new List(xn.SelectNodes("//allow").OfType())).ToArray();
for (int j = 0; j < NodesToRemove.Length; j++)
{
if (NodesToRemove[j].Attributes["host"] != null && NodesToRemove[j].Attributes["host"].Value == hostname)
{
xn.RemoveChild(NodesToRemove[j]);
inserted = true;
}
}

Document.cs 1446:1447
from
foreach (XmlNode xDel in x.SelectNodes("./data"))
x.RemoveChild(xDel);
to
XmlNode[] NodesToRemove =
(new List(x.SelectNodes("./data").OfType())).ToArray();
for (int i = 0; i < NodesToRemove.Length; i++)
x.RemoveChild(NodesToRemove[i]);

 

No comments:

Post a Comment

Note: only a member of this blog may post a comment.