我正在尝试更改Xml元素的值:
<string id="68056"><![CDATA[Anti-Aliasing:]]></string>
<string id="68085"><![CDATA[V Sync:]]></string>
<string id="68100"><![CDATA[Frame Limit:]]></string>
<string id="68125"><![CDATA[Pixel Light Count:]]></string>
<string id="68162"><![CDATA[Shadow Cascades:]]></string>
<string id="68195"><![CDATA[* Game requires restart for changes to take effect *]]></string>
<string id="68300"><![CDATA[Video & Graphics]]></string>
<string id="68333"><![CDATA[Anti-Aliasing: ]]></string>
<string id="68368"><![CDATA[Texture Quality: ]]></string>
<string id="68403"><![CDATA[Pixel Light Count: ]]></string>
<string id="68442"><![CDATA[Shadow Cascades: ]]></string>
<string id="68477"><![CDATA[Graphics]]></string>
<string id="68494"><![CDATA[AddonLoader: Exception iterating ']]></string>
我有数千条线路。 我想更改&lt;中的值。 !CDATA [...]&gt;部分,相对于 id 值。这是我所做的空虚,但它不起作用。
public static void SetElement(int id, string text)
{
XmlDocument doc = new XmlDocument();
doc.Load(File.OpenRead(PATH));
foreach (XmlNode item in doc.DocumentElement.ChildNodes)
{
if (int.Parse(((XmlElement)item).GetAttribute("id")) == id)
{
doc.CreateCDataSection(text);
doc.Save(PATH);
}
}
}
我也尝试过使用doc.DocumentElement.Value = text而不是doc.CreateCDataSection(text),它也没用。
你能给我一个工作空白吗? :)答案 0 :(得分:0)
首先,我建议使用LINQ to XML而不是旧的XmlDocument
模型 - 它更容易使用。
public static void SetElement(int id, string text)
{
var doc = XDocument.Load(PATH);
var element = doc.Descendants()
.Single(e => (int)e.Attribute("id") == id);
element.ReplaceNodes(new XCData(text));
doc.Save(PATH);
}
虽然这段代码可行,但它并不理想 - 您每次都在解析,搜索和编写整个文档。如果您要更改多个元素的内容,则应重新使用XDocument
并仅在完成后保存。
答案 1 :(得分:0)
尝试这样的事情
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string parent =
"<parent>" +
"<string id=\"68056\"><![CDATA[Anti-Aliasing:]]></string>" +
"<string id=\"68085\"><![CDATA[V Sync:]]></string>" +
"<string id=\"68100\"><![CDATA[Frame Limit:]]></string>" +
"<string id=\"68125\"><![CDATA[Pixel Light Count:]]></string>" +
"<string id=\"68162\"><![CDATA[Shadow Cascades:]]></string>" +
"<string id=\"68195\"><![CDATA[* Game requires restart for changes to take effect *]]></string>" +
"<string id=\"68300\"><![CDATA[Video & Graphics]]></string>" +
"<string id=\"68333\"><![CDATA[Anti-Aliasing: ]]></string>" +
"<string id=\"68368\"><![CDATA[Texture Quality: ]]></string>" +
"<string id=\"68403\"><![CDATA[Pixel Light Count: ]]></string>" +
"<string id=\"68442\"><![CDATA[Shadow Cascades: ]]></string>" +
"<string id=\"68477\"><![CDATA[Graphics]]></string>" +
"<string id=\"68494\"><![CDATA[AddonLoader: Exception iterating ']]></string>" +
"</parent>";
StringReader reader = new StringReader(parent);
XDocument doc = XDocument.Load(reader);
var results = doc.Root.Elements("string").OrderBy(x => x.Attribute("id").Value);
}
}
}