Как оценить Xpath, когда DOCTYPE присутствует в декларации XML - PullRequest
0 голосов
/ 02 августа 2011

У меня проблема с оценкой выражения XPath в Windows Script Host при использовании JScript присутствует в верхней части документа. Когда я удаляю DOCTYPE, синтаксический анализ не прерывается. Вот пример кода, который я использую для анализа и загрузки XML. Есть ли способ проанализировать этот вид XML без удаления объявления DOCTYPE.

Я не хочу удалять DOCTYPE во время обработки. Решением может быть удаление DOCTYPE с помощью Regex <!DOCTYPE.*?>/gm; но я не хочу такого решения.

var XmlDocument;
    try {
        XmlDocument = new ActiveXObject("msxml2.DOMDocument.6.0");
        XmlDocument.async = false;
        XmlDocument.resolveExternals = false;
        XmlDocument.validateOnParse = false;
    } catch(e) {
        if(debug == true)
            WScript.echo("***ERROR while creating DOM Object: " + e.description);
    }
    // Load an XML file into the DOM instance
    try {
        XmlDocument.load(filePath);
    } catch(e) {
        if(debug == true)
            WScript.echo("***ERROR LOADING FILE: " + e.description);
    }
    var Node;
    try {
        Node = XmlDocument.selectSingleNode("//metadata/url");
    } catch(e) {
        if(debug == true)
            WScript.echo("***ERROR RESOLVING NODE: " + e.description);
    }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE rightinclude SYSTEM "http://localhost/iw/aa.dtd">
<a>
    <b>
        <c>/someurl.html</c>
    </b>
</a>

Ответы [ 2 ]

0 голосов
/ 19 апреля 2017

Не нужно ничего изменять в XML-файле, вместо этого используйте этот способ для анализа вашего файла, и все будет хорошо.

Вот ссылка с описанием и подробностями относительно:

  • Java XPath Parser
  • Разбор XML-документа
  • Запрос XML-документа
  • Создание XML-документа
  • Изменить XML-документ

Приветствия; -)

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

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

например:

<!DOCTYPE rightinclude SYSTEM "http://localhost/iw/aa.dtd" />
...