我有一个字符串,我从中读到:
TextReader tr = new StreamReader(this.dataPath );
string contents = tr.ReadToEnd();
内容的价值以:
开头"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n....."
当我尝试执行
时 string styleSheet = "<?xml-stylesheet type=\"text/xsl\" href=\"message.xsl\"?>";
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
TextReader tr = new StreamReader(this.dataPath );
string contents = tr.ReadToEnd();
contents.Replace(xmlString,xmlString + styleSheet );
绝对不会找到第一次出现的XmlString。有什么想法吗?
答案 0 :(得分:27)
尝试
contents = contents.Replace(xmlString,xmlString + styleSheet );
这是因为String类是不可变的。
答案 1 :(得分:5)
Replace()方法返回一个新的字符串对象,因此您必须将代码更改为:
content = contents.Replace(xmlString,xmlString + styleSheet );
答案 2 :(得分:3)
string styleSheet = "<?xml-stylesheet type=\"text/xsl\" href=\"message.xsl\"?>";
string xmlString = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
TextReader tr = new StreamReader(this.dataPath );
string contents = tr.ReadToEnd();
string result = contents.Replace(xmlString,xmlString + styleSheet );
您目前没有捕获您在最后一行所做的替换结果。
答案 3 :(得分:2)
System.String
是不可变的。诸如Replace
之类的操作返回一个新字符串而不是修改this
字符串。如果您确实需要可变字符串或仅将System.Text.StringBuilder
调用的结果分配给变量,请使用Replace
。
答案 4 :(得分:1)
要获得技术(以及谁不喜欢),如果您正在搜索字符串
<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n.....
搜索字符串必须是
"<?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"?>\\r\\n"
或
@"<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n"
答案 5 :(得分:1)
这并没有真正回答你的问题,但已经多次回答,所以请允许我这一点。
我见过许多人们将流内容读入字符串的情况,这样就可以进行一些非常简单的操作。在许多情况下,当然在这种情况下,可以执行操作,而无需复制整个字符串并进行处理。
与现有代码相比,您可以编写一个StreamStringReplace方法,该方法将输入流,输出流,查找字符串和替换字符串作为其参数。这会更有效,特别是如果你的xml文档可以变得很大。