LINQ to XML XElement Node - PullRequest
       37

LINQ to XML XElement Node

1 голос
/ 27 января 2011

Я создаю файл XML с использованием LinqXML.

string value = "Steet,<BR> </BR> City";
XElement address = new XElement("Address", value);

Когда я пишу XML-файл, значение адреса отображается как Steet,&lt;BR&gt &lt;/BR&gt Мне просто нужно как то оригинально. (Даже если он не очень хорошо формируется)

Ответы [ 3 ]

4 голосов
/ 27 января 2011

Что ж, если эти вещи не являются правильно сформированными, не ожидайте, что они смогут воспринимать это как XML.Таким образом, если вы хотите поместить неправильно сформированную HTML-разметку в элемент XML, подумайте об использовании раздела CDATA, например,

    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", new XCData(value));

, что приведет к

<Address><![CDATA[Steet,<BR> </BR> City]]></Address>

Если вы хотитепроанализировать значение как XML, а затем сделать это с помощью XmlReader в режиме фрагмента, например

static void Main()
{
    string value = "Steet,<BR> </BR> City";
    XElement address = new XElement("Address", ParseFragment(value));
    Console.WriteLine(address);
}

static IEnumerable<XNode> ParseFragment(string fragment)
{
    using (StringReader sr = new StringReader(fragment))
    {
        using (XmlReader xr = XmlReader.Create(sr, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment }))
        {
            xr.Read();
            XNode node;
            while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null)
            {
                yield return node;
            }
        }
    }
}

, что приводит к

<Address>Steet,<BR> </BR> City</Address>
1 голос
/ 27 января 2011

Не думаю, что вам нужно что-то менять.&lt; и &gt; - это экранирование угловых скобок в XML.При чтении строковых значений парсеры XML автоматически возвращают их в буквенные угловые скобки.CDATA - это просто еще один способ избежать угловых скобок.Они оба выполняют одно и то же в этом случае.Если вы возьмете свой исходный код и прочитаете значение узла <Address> с помощью синтаксического анализатора XML, возвращенная строка будет Street,<BR> </BR> City.Изменение метода перехода на CDATA на самом деле ничего не изменит, за исключением того, что ваш XML (возможно) будет труднее читать.

Если вы хотите, чтобы тег <BR /> был фактически частью документа XML, тогдадолжен сделать это частью документа.То есть ...

new XElement("Address", "Street,", new XElement("BR"), " City")
0 голосов
/ 27 января 2011

вам нужно обернуть его в CDATA, чтобы сохранить его

...