2012-02-06 3 views
3

У меня есть строка в странице ASP.NET MVC данные со значениемкак отображать читаемый XML человека в ASP.NET MVC странице просмотра

<this><is sample = "attribute"><xml><power>!!!</power></xml><oh><yeah></yeah></oh></is></this>. 

Я хочу, чтобы отобразить следующим образом:

<this> 
    <is sample = "attribute"> 
    <xml> 
     <power> !!! </power> 
    </xml> 
    <oh> 
     <yeah> 
     </yeah> 
    <oh> 
    </is> 
</this> 

вещи я попытался:

1: How to Display Formatted XML - лучший ответ и Richards ответить

2: xmlwriter.writeraw();

3: основной LINQ к XML (я не очень хорошо с этим)

EDIT: Я отображая строку ниже, и было интересно, если это может иметь что-то делать с ним:

<%: *formatted string goes here* %> 
+0

Как XElement.ToString не работает? Какой результат? Имейте в виду, что вам придется кодировать вывод, если вы показываете его на веб-странице (вы можете использовать Html.Encode()). – ken

ответ

6

я делал это таким образом:

protected string FormatXml(XmlNode xmlNode) 
{   
    StringBuilder builder = new StringBuilder(); 

    // We will use stringWriter to push the formated xml into our StringBuilder bob. 
    using (StringWriter stringWriter = new StringWriter(builder)) 
    { 
     // We will use the Formatting of our xmlTextWriter to provide our indentation. 
     using (XmlTextWriter xmlTextWriter = new XmlTextWriter(stringWriter)) 
     { 
      xmlTextWriter.Formatting = Formatting.Indented; 
      xmlNode.WriteTo(xmlTextWriter); 
     } 
    } 

    return builder.ToString(); 
} 

http://forums.asp.net/t/1145533.aspx/1

+0

Это то, что я тоже делаю – John

+0

ok, параметр является узлом, так что мне придется разбивать xml на все его узлы и иметь несколько строк? Или я могу поместить весь xml в один node? – tehdoommarine

+0

Вы можете передать RootNode. Также, как я знаю, вы также можете передать 'XmlDocument'. Он имеет [' WriteTo'] (http://msdn.microsoft.com/en-us/library/system.xml.xmldocument .writeto.aspx). – Samich

0

попробуйте установить тип содержимого для XML и добавить заголовок XML перед вашими данными, я использую эту простую функцию приготовительный для моего веб-сервисов, г объект Response:

public void prepXml() 
{ 
    r.AddHeader("Content-Type", "text/xml"); 
    r.Write("<?xml version=" + '"' + "1.0" + '"' + " encoding=" + '"' + "utf-8" + '"' + " ?>"); 
} 
1

Все ваши проблемы из-за того, что все браузеры обрезают пробелы в xml.
Попробуйте использовать &nbsp; рисовать собирается или просто добавить декларацию XML в начало страницы:

<?xml version="1.0" ?> 
<this> 
    <is sample = "attribute"> 
    <xml> 
     <power> !!! </power> 
    </xml> 
    <oh> 
     <yeah> 
     </yeah> 
    <oh> 
    </is> 
</this> 

Все современные браузеры будут правильно обращаться с этим.

+0

Проголосуйте, потому что я смог получить отступы. – tehdoommarine

+0

Любые причины для downvote? – VMAtm

+0

не уверен, что вы можете видеть, кто вас ниспадал, но у вас все еще есть мой верхний. извините за downvote :( – tehdoommarine

3

Проблема в том вы выводя текст, который затем будет интерпретирован браузером в пути по умолчанию, текст обрабатывается - это не знает, что это XML.

Что вам нужно, это библиотека для правильного форматирования текста с использованием стандартных правил XML.

Вы можете попробовать Google Prettify - это библиотека Javascript для форматирования кода (он поддерживает XML, а также многие другие языки программирования). Существует также основанный на .NET форматтер, который вы можете использовать, я думаю, что он был написан Stack Overflow и открыт для источников - но я не могу найти его прямо сейчас.

+0

a очень вероятно возможность. Я создаю построитель StringBuilder, который отображает правильный отступ, но когда я показываю его на моей странице просмотра, он уже не правильный. – tehdoommarine

Смежные вопросы