如何从XML删除无有效字符但保留例如标准,我想所有的<和“从属性值内删除字符串
<log>
<data id="1" name="No Error" value="0" />
<data id="2" name="Error "1" between text" value="0" />
<data id="3" name="Error <2> between text" value="0" />
</log>
我怎样才能daynamicly除去引号包围的“1”和<> 2包围
那最后出来放shuld是
<log>
<data id="1" name="No Error" value="0" />
<data id="2" name="Error 1 between text" value="0" />
<data id="3" name="Error 2 between text" value="0" />
</log>
感谢您的suppot
我想下面的解决方案:
- 阅读文件为文本
- 修改,与开始的字符串
<Name=>
和结尾为<value=>
- 删除所有
",<,>
- 添加
"
后<name=>
并添加"
前<value=>
如果这是正确的,我怎么能做到这一点与C#,替换方法将无法正常工作。
谢谢
为您的信息,我发现了两种不同的方式,
1-
public static void ReplaceInvalidCharFromAttribute(string filePath, string startElement, string nextElement, string[] removeStrings)
{
string tempFile = Path.GetTempFileName();
using (var sr = new StreamReader(filePath))
{
using (var sw = new StreamWriter(tempFile))
{
string line;
string temp;
while ((line = sr.ReadLine()) != null)
{
temp = RemoveInvalidCharFromAttribute(line, startElement, nextElement, removeStrings);
sw.WriteLine(temp??line);
}
}
}
File.Delete(filePath);
File.Move(tempFile, filePath);
}
public static string RemoveInvalidCharFromAttribute(string input, string startElement, string nextElement, string[] invalidChars)
{
if (input.IndexOf(startElement) < 0 || input.IndexOf(nextElement) < 0) return null;
int start =input.IndexOf(startElement) + startElement.Length;
int end = input.IndexOf(nextElement);
StringBuilder res = new StringBuilder(input.Substring(start, (end - start)));
StringBuilder resCopy = new StringBuilder(res.ToString());
foreach (string inv in invalidChars)
res.Replace(inv, "");
// return the result after surrounding the text with double
return
input.Replace(
resCopy.ToString(),
(String.Concat("\"", String.Concat(res.ToString().Trim(), "\" "))));
}
2- http://support.microsoft.com/kb/316063
所以这么好,谢谢
在PHP中我用下面的对数据进行编码,它进入XML之前: -
function xml_encode($string)
{
$string=preg_replace("/&/", "&", $string);
$string=preg_replace("/</", "<", $string);
$string=preg_replace("/>/", ">", $string);
$string=preg_replace("/\"/", """, $string);
$string=preg_replace("/%/", "%", $string);
return utf8_encode($string);
}
它看起来像你在浏览器中建议,直到你真正看看源。
在这一点上,你将需要检查与“&amp;” 和六角/八进制码。
希望帮助一点点。