Есть ли способ вставить один фрагмент кода в другой? - PullRequest
6 голосов
/ 12 августа 2010

Давайте предположим, что у меня есть

  • фрагмент A
  • фрагмент B
    где фрагмент A содержит фрагмент B n раз с n> 1 .

Прямо сейчас я скопировал содержимое фрагмента B в фрагмента A .Это имеет тот недостаток, что всякий раз, когда я изменяю фрагмент B , я должен дополнительно менять фрагмент A .Поэтому мой вопрос заключается в том, есть ли какое-то утверждение для встраивания одного фрагмента в другой?
Например,
<externalsnippet src=".\snippetB.snippet" />
или что-то подобное.

1 Ответ

1 голос
/ 04 февраля 2012

Вы можете использовать внешний анализируемый общий объект , чтобы объявить ссылку на объект для фрагмента B , а затем использовать его несколько раз внутри фрагмента A.

При анализе фрагмента A ссылки на сущности будут расширены, а содержимое фрагмента B будет включено в каждое место, где использовалась сущность.

Например, предположим, что у вас есть файл с именем snipppetB.xml:

<snippetB>
  <foo>Content goes here</foo>
</snippetB>

И файл для сниппета A объявил сущность с именем snippetB, ссылающуюся на snippetB.xml, и использовал ее четыре раза:

<!DOCTYPE snippetA [
   <!ENTITY snippetB SYSTEM "./snippetB.xml">
]>
<snippetA>
<a>&snippetB;</a>
<b>&snippetB;</b>
<c>&snippetB;</c>
<d>&snippetB;</d>
</snippetA>

При анализе файла snippetA.xml содержимое XML будет выглядеть следующим образом:

 <snippetA>
 <a>
 <snippetB>
  <foo>Content goes here</foo> 
  </snippetB>
  </a>
 <b>
 <snippetB>
  <foo>Content goes here</foo> 
  </snippetB>
  </b>
 <c>
 <snippetB>
  <foo>Content goes here</foo> 
  </snippetB>
  </c>
 <d>
 <snippetB>
  <foo>Content goes here</foo> 
  </snippetB>
  </d>
  </snippetA>
...