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

如何循环遍历XML中的所有节点并根据其在C#中的值更改节点值? ... ...,c#,xml,regex,C#,Xml,Regex,这是我要使用的XML文件的简化XML结构 节点文本中可能有网站URL,例如 <result> <relatedProducts> <item> <id></id> <name></name> <text></text> </item> &

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

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

   <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>
…href=“something.com/default.aspx?id=3”。。。
…href=“something.com/default.aspx?id=25”。。。
我想要的是在C#循环中遍历这个xml文档中的所有节点并检查URL链接,然后根据该链接中的id更改链接。比如说,

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

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

<detail>...href="something.com/default.aspx?id=25"...</detail>
…href=“something.com/default.aspx?id=3”。。。
我想把它改成

<text>...href="something.com/default.aspx?id=3"...</text>
…href=“somethingelse.com/query.aspx?rid=3”。。。
最后,使用正确的URL返回整个xml文档

<text>...href="somethingelse.com/query.aspx?rid=3"...</text>
我将让您实现
ReplaceUrl
方法,因为我不知道您需要做什么。。。以下是一些一般性建议:

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

搜索特定的标签,然后进行替换。

“我怎么做?”-您已经在问题中提供了解决方案。加载XML文件。通过所有节点递归。使用正则表达式更新节点值。保存结果。你需要帮助做什么?(我们无法为您开发整个应用程序。)如果您感兴趣的只是查找URL,那么将其视为XML文件可能不值得,只需一次读入每一行,看看是否有URL。如果有,将其转换并将该行写回新文件。感谢您的评论。我遇到了另一个问题,那就是如何替换URL@dtb。我知道伪代码,但在实现它时遇到了问题,这就是为什么我在这里问这个问题。它们并不都是
文本
元素(参见示例),感谢大家的提醒。当然托马斯的解决方案会更有效。谢谢你的帮助!现在我遇到了另一个问题,如果您有任何想法,我将不胜感激
XDocument doc = XDocument.Load(path);
foreach(var element in doc.Descendants())
{
    element.Value = ReplaceUrl(element.Value);
}
doc.Save(path);
    Dim xmlDoc As New XmlDocument
    Dim xmlNodeList As XmlNodeList
    Dim xmlNode As XmlNode

    xmlDoc.LoadXml(strXML)
    'xmlNodeList = xmlDoc.GetElementsByTagName("text")'Do this if its a particular tag
    xmlNodeList = xmlDoc.GetElementsByTagName("result")'Or just put the root tag, in my   
                                                       'case result was the root tag

    For Each xmlNode In xmlNodeList
        xmlNode.InnerText = "new text"
    Next