c# - 如何循环遍历XML中的所有节点并根据C#中的值更改节点值?

标签 c# xml regex

   <result>
        <relatedProducts>
        <item>
            <id></id>
            <name></name>
            <text></text>
        </item>
        <item>
            <id></id>
            <name></name>
            <text></text>
        </item>
        <item>
            <id></id>
            <name></name>
            <text></text>
        </item>
        ...
        </relatedProducts>
        <item>
            <id></id>
            <name></name>
            <intro></intro>
            <detail></detail>
        </item>
            <item>
            <id></id>
            <name></name>
            <intro></intro>
            <detail></detail>
        </item>
        ... 
    </result>

这是我要使用的 xml 文件的简化 XML 结构。

节点文本中可能有网站网址,例如

<text>...href="something.com/default.aspx?id=3"...</text>

<detail>...href="something.com/default.aspx?id=25"...</detail>

我想要的是在 C# 中循环遍历此 xml 文档中的所有节点并检查 URL 链接,然后根据该链接中的 id 更改链接。例如,

我使用正则表达式来检查我看到此 URL 符合模式的每个节点值

<text>...href="something.com/default.aspx?id=3"...</text>

我想将其更改为

<text>...href="somethingelse.com/query.aspx?rid=3"...</text>

最后,返回带有正确 URL 的整个 xml 文档。

最佳答案

XDocument doc = XDocument.Load(path);
foreach(var element in doc.Descendants())
{
    element.Value = ReplaceUrl(element.Value);
}
doc.Save(path);

我会让您实现 ReplaceUrl 方法,因为我不知道您到底需要做什么...只是一些一般性建议:

  • 您可以使用正则表达式从元素文本中提取 URL(请参阅 this question)
  • 解析和修改 URL 的最简单方法可能是使用 UriBuilder类,它允许您访问 URL 的各个组成部分(方案、主机、路径、查询字符串...)

关于c# - 如何循环遍历XML中的所有节点并根据C#中的值更改节点值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5980882/

相关文章:

c# - 如何连接 Datagridview 行值并将其存储到一个数据表单元格中

php - 生成 XML 的 PHP 脚本编码错误

xml - 如何从 Excel VBA 宏生成 XML?

java - 如何在正则表达式中添加参数?

php - preg_replace 替换捕获组内的符号

c# - 从内部调用安全的 ServiceStack 服务

c# - @ViewBag 在当前上下文中不存在

c# - 删除项目时的 ListBox List<T> 绑定(bind)问题

xml - 在nifi中使用EvaluateXpath

C# - 文件路径的正则表达式,例如C :\test\test. 可执行文件