Самый простой из возможных методов: html break в XML doc - PullRequest
0 голосов
/ 18 августа 2010

У меня есть программа c, которая выводит количество строк в другую программу c, которая вставляет их в страницу PHP, загруженную с помощью AJAX. Проблема состоит в том, что вывод представляет собой ряд строк, на которые можно смотреть хорошо, но в которых, если рассматривать их как HTML, отсутствуют разрывы строк.

Первоначально я думал, что нужно было поставить разрывы строк в выходных данных. - Это сработало нормально, тем более что я использовал responseText для обработки вывода AJAX. Теперь я обнаружил, что наряду с необработанным текстом часть метаданных также должна быть частью ответа AJAX. Я перешел к использованию responseXML, но обнаружил, что теги
больше не работают правильно. На этом этапе я мог бы просмотреть любое количество руководств, чтобы понять, как работает какой-то более сложный механизм, но я действительно просто хочу взломать. Могу ли я встроить метаданные в html-комментарий и использовать DOM, чтобы выкопать его (я искал и не вижу хорошего способа получить комментарии, используя dom ...)? Могу ли я использовать XML непосредственно как HTML как-то? Могу ли я использовать CDATA в документе XML (это не выглядит обнадеживающим)? Могу ли я просто использовать переводы строки, пока код не достигнет веб-страницы, а затем JS вставит теги br?

Мне не нужно никакого другого форматирования, только разрывы строк, и все, что нужно сделать, это работать, чем менее сложным, тем лучше.

Ответы [ 2 ]

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

Спасибо за все хорошие предложения, но в итоге я решил просто добавить фиксированное число байтов дескриптора к каждому текстовому ответу, а затем использовать команду substring, чтобы получить либо байты дескриптора, либо основной текстовый ответ. Это позволяет мне продолжать использовать более простой механизм ответа-текста, и в остальном это несложно. Я бы использовал пользовательские заголовки, но я понял, что для этого потребуется буферизовать весь вывод еще в ДРУГОМ месте, так как скрипт php на самом деле содержит только один вызов system () и не знает, что делает стоящая за ним C-программа. 1001 *

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

Как насчет использования таблицы стилей XSLT для форматирования вашего входящего XML.Сохраните следующее как файл .html для примера.Источники: http://www.w3schools.com/xsl/xsl_client.asp & http://www.w3schools.com/dom/dom_parser.asp

<html>
<head>
    <script>
        //YOUR XML FROM AJAX
        var XML = "<top><meta><itemone>test meta</itemone></meta><rows><row>line one</row><row>line two</row><row>line three</row></rows></top>";
        //A stylesheet to format the lines that come back.
        var XSLT = '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match="/"><h2>Lines</h2><xsl:for-each select="descendant::row"><xsl:value-of select="self::*"/><br /></xsl:for-each></xsl:template></xsl:stylesheet>'

        function loadXMLDoc(xml)
        {
            var tempXML;
            //IE
            if (window.ActiveXObject)
            {
                tempXML=new ActiveXObject("Microsoft.XMLDOM");
                tempXML.loadXML(xml);
            }
            else if(window.DOMParser)
            {
                parser=new DOMParser();
                tempXML=parser.parseFromString(xml,"text/xml");
            }
            return tempXML;
        }

        function displayResult()
        {
            var xmlDoc = loadXMLDoc(XML);
            var xsltDoc = loadXMLDoc(XSLT);
            // code for IE
            if (window.ActiveXObject)
            {
                var ex=xmlDoc.transformNode(xsltDoc);
                document.getElementById("example").innerHTML=ex;
            }
            // code for Mozilla, Firefox, Opera, etc.
            else if (document.implementation && document.implementation.createDocument)
            {
                var xsltProcessor=new XSLTProcessor();
                xsltProcessor.importStylesheet(xsltDoc);
                var resultDocument = xsltProcessor.transformToFragment(xmlDoc,document);
                document.getElementById("example").appendChild(resultDocument);
            }
        }
    </script>
</head>
<body onload="displayResult()">
<div id="example" />
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...