Есть ли XML-директива, которая включает фрагменты документа в корневой документ [дубликат]

вы не можете использовать input.click() напрямую, но вы можете вызвать это в другом событии щелчка элемента.

var a = document.querySelector('a');
var inpupt = document.querySelector('a');
a.addEventListener('click', function (e) {
    input.click();
});

это говорит вам Использование элементов ввода скрытого файла с помощью кнопки click () метод

69
задан Mads Hansen 20 April 2015 в 23:23
поделиться

4 ответа

Вы можете использовать внешний объект внешний (проанализированный) общий .

Вы объявляете объект следующим образом:

<!ENTITY otherFile SYSTEM "otherFile.xml">

Затем вы ссылаетесь на него как это:

&otherFile;

Полный пример:

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
  <foo>
    <bar>&otherFile;</bar>
  </foo>
</doc>

Когда синтаксический анализатор XML считывает файл, он будет расширять ссылку на сущность и включать XML-файл, указанный в качестве части content.

Если «otherFile.xml» содержал: <baz>this is my content</baz>

Затем XML был бы оценен и «замечен» парсером XML как:

<?xml version="1.0" standalone="no" ?>
<doc>
  <foo>
    <bar><baz>this is my content</baz></bar>
  </foo>
</doc>

Несколько ссылок, которые могут быть полезны:

80
ответ дан Mads Hansen 15 August 2018 в 22:08
поделиться
  • 1
    Привет, Mads, я застрял в этом, что происходит. Когда я просматриваю файл main.xml в IE, я правильно получаю текст моего другогоFile.xml, но когда я использую ту же концепцию в своем приложении и загружаю свой XML в XMLDocument из .net, то я не получаю текст otherFile.xml вместо этого, я получаю все, что написано в main.xml, который является все & lt;? xml version = & quot; 1.0 & quot; автономный = & Quot; нет & Quot; ? & GT; & lt;! DOCTYPE doc [& lt;! ENTITY otherFile SYSTEM "otherFile.xml" & gt; & gt; & gt; ] & GT; & Lt; & док GT; & Lt; & Foo GT; & Lt; & бар GT; & амп; otherFile; & Lt; / бар & GT; & Lt; / & Foo GT; & Lt; / док & GT; вы можете сказать мне, если мне нужно сделать что-то еще, чтобы загрузить его в мой xmldocument ??? – Sumit 10 March 2011 в 08:47
  • 2
    Я не очень хорошо знаком с .NET api. Тем не менее, вам может потребоваться узнать, для чего установлено свойство XMLResolver. Если свойство XMLResolver не установлено в объекте XMLDocument, оно может не загружать внешние ресурсы. msdn.microsoft.com/en-us/library/5fcwybb2.aspx – Mads Hansen 10 March 2011 в 13:04
  • 3
    делать браузеры, такие как хром, понимать это? – Alp 9 March 2013 в 19:27
  • 4
    браузеры могут отключить это по соображениям безопасности для локальных файлов. использовать --allow-file-access-from-files переключатель для chrome или загрузить на хост – premek.v 4 February 2014 в 12:30
  • 5
    В .NET установите XmlResolver (создав по умолчанию XmlUriResolver) и ProhibitDTD (to false) в XmlReaderSettings, чтобы устранить проблемы с разрешением. По умолчанию кажется, что политика безопасности Windows / .NET не позволяет загружать внешние ресурсы. – John Jesus 27 October 2016 в 13:34
12
ответ дан Tomasz Nurkiewicz 15 August 2018 в 22:08
поделиться

Решение Mads Hansen хорошо, но для чтения внешнего файла в .NET 4 потребовалось некоторое время, чтобы выяснить, используя подсказки в комментариях о resolvers, ProhibitDTD и т. д.

Вот как это делается done:

        XmlReaderSettings settings = new XmlReaderSettings();
        settings.DtdProcessing = DtdProcessing.Parse;
        XmlUrlResolver resolver = new XmlUrlResolver();
        resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;
        settings.XmlResolver = resolver;
        var reader = XmlReader.Create("logfile.xml", settings);
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        foreach (XmlElement element in doc.SelectNodes("//event"))
        {
            var ch = element.ChildNodes;
            var count = ch.Count;
        }

logfile.xml:

<?xml version="1.0"?>
<!DOCTYPE logfile [
<!ENTITY events    
 SYSTEM "events.txt">
]>
<logfile>
&events;
</logfile>

events.txt:

<event>
    <item1>item1</item1>
    <item2>item2</item2>
</event>
0
ответ дан user3717478 15 August 2018 в 22:08
поделиться

Другие ответы охватывают 2 наиболее распространенных подхода, Xinclude и внешние XML-объекты. У Microsoft действительно отличная запись о том, почему следует предпочитать Xinclude, а также несколько примеров реализации. Я привел сравнение ниже:

Per http://msdn.microsoft.com/en-us/library/aa302291.aspx

Почему XInclude?

Первый вопрос, который можно задать, - «Зачем использовать XInclude вместо XML-внешних объектов?» Ответ заключается в том, что внешние XML-объекты имеют ряд известных ограничений и неудобных последствий, которые эффективно препятствуют тому, чтобы они были объектом общего назначения. В частности:

  • Внешний XML-объект не может быть полномасштабным независимым XML-документом - ни автономное объявление XML, ни объявление Doctype не разрешены. Это эффективно означает, что сам внешний XML-объект не может включать другие внешние объекты.
  • Внешний XML-объект должен быть хорошо сформирован XML (на первый взгляд это не так уж плохо, но представьте, что вы хотите включить образец кода C # в свой XML-код document).
  • Несоблюдение внешнего объекта является фатальной ошибкой; любое восстановление строго запрещено.
  • Может быть включен только весь внешний объект, нет способа включить только часть документа. -Внутренние объекты должны быть объявлены в DTD или внутреннем подмножестве. Это открывает коробку Pandora, полную последствий, например, тот факт, что элемент документа должен быть назван в объявлении Doctype и что для проверки читателей может потребоваться, чтобы полная модель содержимого документа определялась в DTD среди других.

Недостатки использования внешних объектов XML в качестве механизма включения были известны в течение некоторого времени и на самом деле породили представление заявки на включение XML в W3C в 1999 году Microsoft и IBM. В предложении определена модель обработки и синтаксис для объекта интеграции XML общего назначения.

Спустя четыре года версия 1.0 включений XML, также известная как Xinclude, является Рекомендацией кандидата, что означает, что W3C считает, что он был широко рассмотрен и удовлетворяет основным техническим проблемам, которые он решил решить, но еще не является полной рекомендацией.

Еще один хороший сайт, который предоставляет множество примеров реализации https://www.xml.com/pub/a/2002/07/31/xinclude.html . Ниже приведен пример совместного использования с сайта:

<book xmlns:xi="http://www.w3.org/2001/XInclude">

  <title>The Wit and Wisdom of George W. Bush</title>

  <xi:include href="malapropisms.xml"/>

  <xi:include href="mispronunciations.xml"/>

  <xi:include href="madeupwords.xml"/>

</book>
15
ответ дан VoteCoffee 15 August 2018 в 22:08
поделиться
  • 1
    Это сравнение между объектами Xinclude и XML, оба из которых являются верхними 2 ответами и уже показывают или предоставляют примеры использования. Я чувствовал, что он добавил к обсуждению и слишком длинный / сложный для комментария. Точно так же вопрос задает вопрос «может», а не «как», так как, если ответить на обобщенный вопрос, это направлено на выяснение направленности, которая, по моему мнению, была на самом деле вопросом. Много других хороших ссылок на конкретную реализацию. Это, сказал, спасибо за отзывы. В ближайшее время я обновляю его. – VoteCoffee 8 March 2017 в 20:20
  • 2
    Я ценю ваш ответ и уважение, что вы попытались решить проблему, добавив пример, но я думаю, что ваш ответ по-прежнему принципиально ошибочен. Как правило, при цитировании текста из другого места вы должны включать этот текст в блок-образец (так что очевидно, что вы не пытаетесь заархивировать) и, что более важно, предоставить свое собственное обсуждение выше / ниже блока, которое очень четко объясняет, почему вы цитировали этот конкретный текст и то, как он помогает ответить на вопрос. Если повторить обе эти вещи и повторить комментарий (так что я получаю уведомление), я с удовольствием удалю свой комментарий и уберу свой нижний план. – Dan Bechard 9 March 2017 в 14:25
  • 3
    Обновлено с кавычками и комментариями – VoteCoffee 9 March 2017 в 18:44
  • 4
    Это значительно лучший ответ! Упрощенный и удаленный мой первый комментарий, который больше не верен. Я оставлю другой комментарий для контекста и, надеюсь, поможет будущим читателям лучше писать ответы. – Dan Bechard 9 March 2017 в 19:01
  • 5
    Не беспокойтесь, спасибо за советы – VoteCoffee 9 March 2017 в 22:56
Другие вопросы по тегам:

Похожие вопросы: