почему временные результаты здесь? - PullRequest
4 голосов
/ 12 мая 2010

, если мы предположили, что "A.B." это значение для элемента xml с именем дали имена следующий код преобразует это значение в «A.tempspacetempspaceB». вместо "А.Б."

foreach (XElement initial in doc.XPathSelectElements("//given-names"))
{
    string v = initial.Value.Replace(".", ". ").TrimEnd(' ');
    initial.SetValue(v);
}

Так почему же пространство приходит сюда вместо буквального пространства ??

Ответы [ 3 ]

1 голос
/ 03 августа 2010

Во-первых, пробел недопустим внутри имени тега XML, и если вы находитесь в DOM или в объекте, связанном с DOM (которым вы являетесь :-), он будет бороться с вами до исчезновения в любое время, когда вы попытаетесь нарушить основную грамматику XML - может дажеПозвоните в полицию, если вы делаете это :-)).Я удивлен, что это не просто бросило на тебя, когда ты пытался.Это просто не позволяет вам сделать это, так как это больше не будет XML.

Проверьте NMTOKEN определение.

1 голос
/ 14 сентября 2010

Ваш код дал мне ожидаемые результаты при тестировании. Я приказал попробовать, я бросил небольшой тест в консольное приложение. Я использовал следующий 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 в строку для вывода?

0 голосов
/ 02 августа 2010

Вы пытались разложить ваши вызовы методов, чтобы посмотреть, работает ли это?

например:.

string v = initial.Value.Replace(".", ". ");
v = v.TrimEnd(@"\s+");
initial.SetValue(v);

Кроме того, вы проверили, соответствуют ли ваши текстовые кодировки? Кодировка анализируемого XML, вероятно, будет Unicode, тогда как кодировка по умолчанию для строки в C # - US-ASCII. Я не уверен, будет ли это иметь значение, но, возможно, стоит проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...