【问题标题】:Replace all string of existing xml file?替换现有xml文件的所有字符串?
【发布时间】:2013-10-21 17:19:09
【问题描述】:

我正在尝试用字符串替换现有的 .xml 扩展文件的内部文本。

我这样做的原因是:我想从 .xml 文件中读取图像。但是图像没有从 .xml 文件的现有文件夹中加载文件。我尝试了很多次来解决这个问题。唯一可能的事情是放置图像文件目标的硬路径。于是我开始尝试这个:

  1. 读取 .xml 文件的内部字符串 - 已解决
  2. 获取 xml 路径的完整父级 - 已解决
  3. 读取 xml 中的文本并导出为字符串 - 已解决
  4. 从字符串中找到“<img src='”存在的区域 - 已解决
  5. 将父路径放在存在区域之后 - 已解决
  6. 通过替换所有字符串将字符串保存到现有 .xml - 未解决?

工作的目的是“显示 XML 文件中的图像”。所以请有人回答未解决的文章。 并且不要向我推荐 Base64ToImage 之类的方法。我只想这样走。希望我能在这里得到答案。

现有的 XML: <helpRoot> <body Type="Section1"> <![CDATA[ <img src='Help1.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section1</h3></hr>
<p style="color:#484848;font-family:open sans;">Text is shown</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is not showing</h3></hr>
]]></body> <body Type="Section2"> <![CDATA[ <img src='Help2.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section2</h3></hr>
<p style="color:#484848;font-family:open sans;">Text is shown</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is not showing</h3></hr>
]]></body> ... </helpRoot>

新的 XML 字符串: <helpRoot> <body Type="Section1"> <![CDATA[ <img src='D:/Project/Image/Help1.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section1</h3></hr>
<p style="color:#484848;font-family:open sans;">Text has showing</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is showing</h3></hr>
]]></body> <body Type="Section2"> <![CDATA[ <img src='D:/Project/Image/Help2.png'/>
<h3 style="color:#2B94EA;font-family:open sans;">Section2</h3></hr>
<p style="color:#484848;font-family:open sans;">Text has shown</p> <h3 style="color:#3399FF;font-family:open sans;"> Image is not showing</h3></hr>
]]></body> ... </helpRoot>

【问题讨论】:

  • 你的问题很混乱。如果您的意思是要操作 XML 文件,那么如果您显示一个示例输入和所需的输出,这将非常有帮助。我强烈建议您在此处不要使用字符串替换。使用 XML API as XML 操作它。
  • 您是否只是在保存新形成的 xml 文件时遇到问题,因为在第 5 点您已经成功地将字符串添加到 xml 中?
  • 是的,我只是想保存我的“Prepared”字符串而不是 .xml 文件中的文本并显示结果。
  • @mangasm 我下面的回答有帮助吗?我已尽力使用您在上面提供的信息。
  • 看起来像 找出 10 个不同的谜题

标签: c# xml


【解决方案1】:

我会使用 XDocument 和 HTMLAgilityPack

var xml =
@"<base>
    <child><![CDATA[<img src=""/path"" />]]></child>
</base>";

var xDocument = XDocument.Parse(xml);

var xChild = xDocument.Descendants("child").First();

var cData = xChild.Nodes().OfType<XCData>().First();

var htmlDocument = new HtmlDocument();

htmlDocument.LoadHtml(cData.Value);

var imgNode = htmlDocument.DocumentNode.SelectSingleNode("img");

imgNode.Attributes["src"].Value = "/new/path";

using (var writer = new StringWriter())
{
    htmlDocument.Save(writer);
    cData.Value = writer.ToString();
}

xDocument 现在包含:

<base>
  <child><![CDATA[<img src="/new/path">]]></child>
</base>

【讨论】:

  • 是的,为了处理 XML,我也会使用 XDocument。但是根据您的问题,我不确定您的问题到底是什么。
  • 感谢@dav_i 的贡献。但是我的 XML 文件包含很多 CDATA。所有 CDATA 中都有很多 标签。所以我只想用我处理过的 XML 字符串替换现有的 XML 内容。任何其他建议:)
  • @mangasm 使用上面没有所有 HTMLAgility 的东西,检查我的previous revision
猜你喜欢
  • 2023-03-15
  • 2013-02-20
  • 2019-01-10
  • 2018-07-11
  • 1970-01-01
  • 2011-10-11
  • 2012-08-01
  • 2014-08-05
相关资源
最近更新 更多