如果我们认为“A.B.”是一个名为given-names的xml元素的值 以下代码将此值转换为“A.tempspacetempspaceB”。而不是“A.B。”
foreach (XElement initial in doc.XPathSelectElements("//given-names"))
{
string v = initial.Value.Replace(".", ". ").TrimEnd(' ');
initial.SetValue(v);
}
那么为什么tempspace来到这里而不是文字空间?
答案 0 :(得分:1)
首先,在XML标记名称中的空间是非法的,如果你在DOM或与DOM相关的对象(你是:-)中,那么当你试图打破核心XML语法时,他会打你灭绝 - 甚至可能如果你坚持打电话警察:-))。我很惊讶,当你尝试的时候,它不会只是向你扔。它只是不能让你这样做,因为它不再是XML了。
查看NMTOKEN定义。
答案 1 :(得分:1)
我测试时,您的代码给了我预期的结果。我想尝试一下,我在一个控制台应用程序中进行了一些测试。我使用了以下XML:
<?xml version="1.0" encoding="utf-8" ?>
<root>
<user>
<given-names>A.B.</given-names>
</user>
<user>
<given-names>Y.Z.</given-names>
</user>
</root>
然后我创建了一个全新的控制台应用程序项目并将其放在Program类中:
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load("XMLFile1.xml");
foreach (XElement initial in doc.XPathSelectElements("//given-names"))
{
string v = initial.Value.Replace(".", ". ").TrimEnd(' ');
initial.SetValue(v);
}
Console.WriteLine(doc.ToString());
}
}
它产生了所需的输出:
<root>
<user>
<given-names>A. B.</given-names>
</user>
<user>
<given-names>Y. Z.</given-names>
</user>
</root>
这里肯定会有其他问题导致问题。你在做什么样的环境?如何将XDocument转换为输出字符串?
答案 2 :(得分:0)
您是否尝试过分解方法调用以查看是否有效?
e.g:
string v = initial.Value.Replace(".", ". ");
v = v.TrimEnd(@"\s+");
initial.SetValue(v);
另外,您检查过您的文字编码是否匹配?您正在解析的XML的编码可能是Unicode,而C#中字符串的默认编码是US-ASCII。我不确定这是否会有所作为,但可能值得一试。