为什么tempspace会在这里产生?

时间:2010-05-12 06:22:58

标签: c# .net xml

如果我们认为“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来到这里而不是文字空间?

3 个答案:

答案 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。我不确定这是否会有所作为,但可能值得一试。