【问题标题】:Find and Replace and attribute in XML file using libxml/xpath in C program在 C 程序中使用 libxml/xpath 在 XML 文件中查找和替换和属性
【发布时间】:2020-08-02 15:34:40
【问题描述】:

我有一个包含不同部分的 xml 文件,我需要“重命名”这个巨大文件中出现的某些属性(例如查找并替换为新名称)。我一直使用 libxml 和 xpath 来修改和满足其他要求,但是对于这个,我不确定如何使用 libxml 和 xpath API 来完成。请帮忙。

例如,在下面的文件中,我需要找到所有“橙色”字符串并将其替换为“紫色”字符串。请帮忙..

<a>
    <my_section enum="ORANGE" name="blah"> </my_section> 
    <my_section enum="APPLE" name="blah blah"> </my_section>
    <my_section enum="ORANGE1" name="blah1"> </my_section>
    <your_section color="ORANGE" name="blah"> </your_section> 
    <another_section city="LONDON" blah="ORANGE"> </another_section>
    <any_section code="RED" age="ORANGE"> </any_section> 
</a>

【问题讨论】:

    标签: xml xpath libxml2 xml-libxml


    【解决方案1】:

    我知道 XPath 以及它有多复杂......但是,也许这个问题的解决方案只是一个简单的字符串替换?但也许有一些我没有想到的场景,你没有在这里展示这不匹配。

    但如果你真的想通过 xpath 来做

    //*[@*='ORANGE']
    

    选择所有包含值为橙色的属性的元素

    //*[@*='ORANGE']/@*[string()='ORANGE']
    

    只获取属性

    【讨论】:

    • 那么,您是在建议,我可以编写一个常规的 C 函数来查找和替换给定文件中的字符串吗?也许我可以将其作为最后的选择。我必须在这个文件中做很多操作,比如删除部分,将子部分从一个部分合并到另一个部分。我可以通过 libxml/xpath 实现。对于这个,我认为 xpath 提供了一些我可以使用的技术..
    • 谢谢!!。绝对有帮助。使用您的解决方案,我现在能够收集具有此所需字符串作为其属性之一的所有节点。但是在一个节点中,属性名称可以是“枚举”,而在另一个节点中,属性名称可以是“颜色”。所以现在替换字符串还是有点挑战的。
    • 我放置的第二个 xpath 没有帮助吗?那个应该只返回具有您所寻求的价值的属性?
    • 不要使用我发布的第一个 XPath,这纯粹是为了帮助您了解第二个的作用。第二个直接返回属性列表。不是元素。我不太了解 C。但在 C# 中,我有 3 种类型的对象,XElement、XAttribute 和 XNodes。在这种情况下,我认为您使用的是 XNode 的 C 等效项,因此我建议直接设置其文本或值。
    • 知道了!第一个本身返回父节点。我只有两种不同类型的“属性”类型(枚举和颜色)。所以我寻找节点->名称,如果它的枚举,它为枚举设置新值的属性,否则它为'颜色'属性。我唯一的意图不是硬编码寻找这种特殊的“attrtib”类型。但我现在可以继续使用这个解决方案。非常感谢您的帮助 Davey van Tilburg
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2013-06-12
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    相关资源
    最近更新 更多