从 XML 文件中查找和替换值

Posted

技术标签:

【中文标题】从 XML 文件中查找和替换值【英文标题】:Find and substitute values from XML files 【发布时间】:2021-11-06 23:40:09 【问题描述】:

我正在尝试自动将翻译从一个 XML 文件替换为另一个。原始翻译将翻译设置在错误的文件中,我正在尝试通过自动化过程将其恢复。原始文件是这样的:

    <version major="3" minor="6" revision="3" build="1" />
    <region id="TranslatedStringKeys">
        <node id="root">
            <children>
                <node id="TranslatedStringKey">
                    <attribute id="Content" type="28" handle="ls::TranslatedStringRepository::s_HandleUnknown" value="Spanish 1" />
                    <attribute id="ExtraData" type="23" value="" />
                    <attribute id="Speaker" type="22" value="" />
                    <attribute id="Stub" type="19" value="True" />
                    <attribute id="UUID" type="22" value="AAA" />
                </node>
                <node id="TranslatedStringKey">
                    <attribute id="Content" type="28" handle="ls::TranslatedStringRepository::s_HandleUnknown" value="Spanish 2" />
                    <attribute id="ExtraData" type="23" value="" />
                    <attribute id="Speaker" type="22" value="" />
                    <attribute id="Stub" type="19" value="True" />
                    <attribute id="UUID" type="22" value="BBB" />
                </node>
            </children>
        </node>
    </region>
<content contentuid="h5f6c914fg7db0g4763g9731g58a5eb60c6ab" Source="1.lsb" Key="AAA">English1</content>
<content contentuid="h95735cfdgc22cg4d38g9679ge071f18d77aa" Source="1.lsb" Key="BBB">English2</content>

我的目标是将 id="UUID" 属性中的属性 'value' 的值与每个 'content' 节点的 Key 进行比较,如果相同,则替换每个 'content' 的值' id="Content" 的属性中具有属性 'value' 的值的节点,因此它的结尾如下:

<content contentuid="h5f6c914fg7db0g4763g9731g58a5eb60c6ab" Source="1.lsb" Key="AAA">Spanish 1</content>
<content contentuid="h95735cfdgc22cg4d38g9679ge071f18d77aa" Source="1.lsb" Key="BBB">Spanish 2</content>

我曾尝试使用 C# 和 Xml.Linq 进行操作,但由于我的代码构建经验非常有限,因此我在构建代码时遇到了很多错误。

感谢您的帮助和时间

【问题讨论】:

【参考方案1】:

如果有人遇到同样的问题,我找到了解决方案:

        XmlDocument docMain = new XmlDocument();
        XmlDocument docCommon = new XmlDocument();
        docMain.Load("spanish.xml");
        docCommon.Load("COMMON.xml");
       
        foreach (XmlElement elem in docMain.FirstChild)
        
            if (elem.GetAttribute("Key") != "")
            
                foreach (XmlElement att in docCommon.SelectNodes("descendant::save/region/node/children/node"))
                
                    XmlNodeList AttList = (XmlNodeList)att.ChildNodes;
                    XmlElement trans = (XmlElement) AttList.Item(0);
                    XmlElement UUID = (XmlElement)AttList.Item(4);
                    if (elem.GetAttribute("Key") == UUID.GetAttribute("value"))
                    
                        elem.InnerText= trans.GetAttribute("value");
                    
                    else  
                
            
            else  
        

        docMain.Save("modified.xml");

如果您愿意,请随时添加建议以优化代码。

【讨论】:

请将您的答案标记为答案,以便问题结束。

以上是关于从 XML 文件中查找和替换值的主要内容,如果未能解决你的问题,请参考以下文章

从 xml 属性中查找并执行数学表达式并替换值

VS代码查找xml属性并替换为当前值*因子

PLSQL:在 xml 中查找标签值并将其替换为标签名称以创建示例数据

从主文件中的值查找和替换文件

替换VB6中的XML节点中的值

查找和替换打字稿角度