paremetrize часть значения атрибута xml - PullRequest
0 голосов
/ 10 июня 2019

Я демарширую пару больших файлов XML.у них есть общая часть, и я решил написать общие части в отдельном XML-файле, а затем включить его, используя тег xi:include.это выглядит так:

<tag1>
  <tag2>
  </tag2>
  <tag3>
  </tag3>
  <xi:include href = "long/common/part/of/partial/xml/file1"/>
  <xi:include href = "long/common/part/of/partial/xml/file2"/>
</tag1>

В данный момент я хотел бы параметризовать long/common/part.Я пытался определить переменную, используя xsl:variable, например,

 <xsl:variable name="test">
    "long/common/part/of/partial/xml/"
    </xsl:variable>

, но присвоение значения для href было проблемой, ни

<xi:include href = "{$test}"/>

, ни

<xi:include href = <xsl:value-of select="test"/>

не работал.Есть ли способ присвоить значение атрибуту XML?

1 Ответ

2 голосов
/ 10 июня 2019

Здесь вы смешиваете синтаксис XInclude, XSLT и ad-hoc {$var} (не является частью XML). Что вы можете сделать для параметризации значения href в элементах XInclude, так это использовать ссылку на сущность (помимо прочего, XML и SGML-механизм для подстановки текстовых переменных):

<xi:include href="&href-value;"/>

где href-value должен быть привязан к строке long/common/part/of/partial/xml/file1 либо программно, либо (предпочтительно) путем объявления его в прологе, например:

<!DOCTYPE tag1 [
  <!ENTITY href-value "long/common/part/of/partial/xml/file1">
]>
<tag1>
 <xi:include href = "&href-value;"/>
</tag1>

Однако, так как теперь вы все равно используете ссылки на сущности, вы можете достичь того же самого с помощью только сущностей и вообще без XInclude:

<!DOCTYPE tag1 [
  <!ENTITY common-part SYSTEM "long/common/part/of/partial/xml/file1">
]>
<tag1>
 &common-part;
</tag1>

Это вытягивает содержимое long / common / part / of / частичного / xml / file1 в сущность common-part, а затем ссылается на это значение в содержимом, а синтаксический анализатор XML обрабатывает документ как значение замены для common-part (например, все, что хранится в long/common/part/of/partial/xml/file1) было указано непосредственно в документе.

Надеюсь, это не слишком запутанно; в этом ответе есть общее объяснение того, как работают сущности в XML и SGML

...