mirror of
https://gitgud.io/c0ffeeeeeeee/rimworld-animations.git
synced 2024-08-15 00:43:45 +00:00
60 lines
1.8 KiB
C#
60 lines
1.8 KiB
C#
|
using System;
|
|||
|
using System.Collections;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using System.Xml;
|
|||
|
using Verse;
|
|||
|
|
|||
|
namespace Rimworld_Animations
|
|||
|
{
|
|||
|
public class PatchOperationAddOrReplace : PatchOperationPathed
|
|||
|
{
|
|||
|
|
|||
|
protected string key;
|
|||
|
private XmlContainer value;
|
|||
|
|
|||
|
protected override bool ApplyWorker(XmlDocument xml)
|
|||
|
{
|
|||
|
XmlNode valNode = value.node;
|
|||
|
bool result = false;
|
|||
|
IEnumerator enumerator = xml.SelectNodes(xpath).GetEnumerator();
|
|||
|
try
|
|||
|
{
|
|||
|
while (enumerator.MoveNext())
|
|||
|
{
|
|||
|
object obj = enumerator.Current;
|
|||
|
result = true;
|
|||
|
XmlNode parentNode = obj as XmlNode;
|
|||
|
XmlNode xmlNode = parentNode.SelectSingleNode(key);
|
|||
|
if (xmlNode == null)
|
|||
|
{
|
|||
|
// Add - Add node if not existing
|
|||
|
xmlNode = parentNode.OwnerDocument.CreateElement(key);
|
|||
|
parentNode.AppendChild(xmlNode);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
// Replace - Clear existing children
|
|||
|
xmlNode.RemoveAll();
|
|||
|
}
|
|||
|
// (Re)add value
|
|||
|
xmlNode.AppendChild(parentNode.OwnerDocument.ImportNode(valNode.FirstChild, true));
|
|||
|
}
|
|||
|
}
|
|||
|
finally
|
|||
|
{
|
|||
|
IDisposable disposable = enumerator as IDisposable;
|
|||
|
if (disposable != null)
|
|||
|
{
|
|||
|
disposable.Dispose();
|
|||
|
}
|
|||
|
}
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|