Сохраняйте теги и их значения в файле XML в двух разных массивах с помощью сценария оболочки - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть XML файл в формате:

<classes>

 <subject>
  <name>Operating System</name>
  <credit>3</credit>
  <type>Theory</type>
  <faculty>Prof. XYZ</faculty> 
 </subject>

 <subject>
  <name>Web Development</name>
  <credit>3</credit>
  <type>Lab</type>
 </subject>

</classes>

Ожидаемый вывод:

index 0 : name- Operating System
index 1 : credit- 3
index 2 : type- Theory
index 3 : faculty- Prof. XYZ
index 4 : name- Web Development
index 5 : credit- 3
index 6 : type- Lab

С помощью файла .xsl я могу сгенерировать массив всех имен тегов.

Команда: tagArr=($( xsltproc tag_name.xsl file.xml ))

tag_name.xsl Файл:

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" />
    <xsl:strip-space elements="*" />

    <xsl:template match="/classes/subject/*">
        <xsl:value-of select="name(.)" /><xsl:text>&#x0a;</xsl:text>
    </xsl:template>
</xsl:stylesheet>

Аналогичным образом я хочу создать другой массив, который будет иметь элементы в качестве значения этих захваченных тегов.

1 Ответ

0 голосов
/ 11 апреля 2020

Звучит так, как будто вы хотите использовать

<xsl:value-of select="concat(name(), '- ', .)"/>

вместо <xsl:value-of select="name(.)" />.

Насколько я понимаю, оболочка рассматривается как разделитель элементов массива поэтому, если вы хотите передать значение из XSLT в оболочку как отдельный элемент массива, ему необходимо удалить или заменить пробелы, например,

<xsl:value-of select="concat(name(), '-', translate(., ' ', '+'))"/>

заменит любой пробел в значении элемента на + символа, а затем оболочка будет, по крайней мере, иметь столько элементов массива, сколько есть элементов, обрабатываемых шаблоном XSLT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...