簡體   English   中英

以編程方式在XAML中查找和替換

[英]Find and replace in XAML programatically

我試圖以編程方式解析/搜索XAML文件中的某個節點,然后通過某個屬性對其進行修改。 XAML是Windows工作流,因此它不是真正的用戶控件。 我發現了許多使用XamlReader解析Xaml文件以查找控件然后修改控件的示例。 但是在我的情況下,我正在尋找不是DependencyObjects的自定義活動。 我可以使用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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM