以编程方式在 XAML 中查找和替换
Find and replace in XAML programatically
我正在尝试以编程方式 parse/search 某个节点的 XAML 文件,然后修改某个属性。 XAML 是一个 windows 工作流程,因此它不是真正的用户控件。我发现许多使用 XamlReader 解析 Xaml 文件以查找控件然后修改控件的示例。但就我而言,我正在寻找不是 dependancyObjects 的自定义活动。我可以使用 XamlReader 在 windows 工作流 Xaml 中查找自定义活动并修改某些属性吗?或者有更好的解决方案吗?
您不需要使用 XamlReader,使用 XmlDocument 并遍历元素和属性。
这是我们要做的,只需编写 "DoYourStringReplace" 方法:
private void ParseXml(
TextWriter resultStream,
TextReader sourceStream)
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(sourceStream);
ParseXmlNodes(doc.DocumentElement);
using (XmlWriter xw = XmlWriter.Create(resultStream))
{
doc.WriteTo(xw);
}
}
/// <summary>
/// Parse a single XML node and its children.
/// </summary>
/// <param name="node"></param>
private void ParseXmlNodes(XmlNode node)
{
if (node.NodeType == XmlNodeType.Element)
{
//
// Replace tokens in XML attribute values
//
foreach (XmlAttribute a in node.Attributes)
{
a.Value = DoYourStringReplace(a.Value);
}
}
else if (node.NodeType == XmlNodeType.Text)
{
//
// Replace tokens in the XML Element value
//
node.Value = DoYourStringReplace(node.Value);
}
//
// Do the same thing for all children
//
foreach (XmlNode child in node.ChildNodes)
{
ParseXmlNodes(child);
}
}
我正在尝试以编程方式 parse/search 某个节点的 XAML 文件,然后修改某个属性。 XAML 是一个 windows 工作流程,因此它不是真正的用户控件。我发现许多使用 XamlReader 解析 Xaml 文件以查找控件然后修改控件的示例。但就我而言,我正在寻找不是 dependancyObjects 的自定义活动。我可以使用 XamlReader 在 windows 工作流 Xaml 中查找自定义活动并修改某些属性吗?或者有更好的解决方案吗?
您不需要使用 XamlReader,使用 XmlDocument 并遍历元素和属性。
这是我们要做的,只需编写 "DoYourStringReplace" 方法:
private void ParseXml(
TextWriter resultStream,
TextReader sourceStream)
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.Load(sourceStream);
ParseXmlNodes(doc.DocumentElement);
using (XmlWriter xw = XmlWriter.Create(resultStream))
{
doc.WriteTo(xw);
}
}
/// <summary>
/// Parse a single XML node and its children.
/// </summary>
/// <param name="node"></param>
private void ParseXmlNodes(XmlNode node)
{
if (node.NodeType == XmlNodeType.Element)
{
//
// Replace tokens in XML attribute values
//
foreach (XmlAttribute a in node.Attributes)
{
a.Value = DoYourStringReplace(a.Value);
}
}
else if (node.NodeType == XmlNodeType.Text)
{
//
// Replace tokens in the XML Element value
//
node.Value = DoYourStringReplace(node.Value);
}
//
// Do the same thing for all children
//
foreach (XmlNode child in node.ChildNodes)
{
ParseXmlNodes(child);
}
}