Мне нужно создать отчет, сравнив несколько xmls. Существует base.xml и несколько chunked xmls. На самом деле эти chunked xmls преобразуются подмножество base.xml. Моя структура папок.Сравнение нескольких xmls с использованием for-each
Folder A - base.xml
Folder B - metadata.xml(all the references to chuncked maintained here)
Folder chunked - a.xml, b.xml, c.xml
base.xml
<SchoolRoster>
<department>
<name>Science</name>
<location>LON</location>
<Student>
<rollNum>001</rollNum>
<name>John</name>
<age>14</age>
<course>
<refnum>A1</refnum>
<math>A</math>
<english>B</english>
<metas>
<meta>
<name>x</name>
<value>0</value>
</meta>
<meta>
<name>y</name>
<value>1</value>
</meta>
<meta>
<name>z</name>
<value>1</value>
</meta>
</metas>
</course>
<course>
<refnum>B1</refnum>
<government>A+</government>
<math>A</math>
<english>B</english>
</course>
</Student>
<Student>
<rollNum>002</rollNum>
<name>Tom</name>
<age>13</age>
<course>
<refnum>C1</refnum>
<gym>A</gym>
<geography>incomplete</geography>
<metas>
<meta>
<name>x</name>
<value>2</value>
</meta>
<meta>
<name>y</name>
<value>1</value>
</meta>
</metas>
</course>
</Student>
</department>
<department>
<name>History</name>
<location>OXE</location>
<Student>
<rollNum>001</rollNum>
<name>John</name>
<age>14</age>
<course>
<refnum>A1</refnum>
<math>A</math>
<english>B</english>
<metas>
<meta>
<name>x</name>
<value>0</value>
</meta>
<meta>
<name>y</name>
<value>1</value>
</meta>
</metas>
</course>
<course>
<refnum>B1</refnum>
<government>A+</government>
<math>A</math>
<english>B</english>
</course>
</Student>
<Student>
<rollNum>006</rollNum>
<name>Harry</name>
<age>13</age>
<course>
<gym>A</gym>
<geography>incomplete</geography>
<metas>
<meta>
<name>x</name>
<value>2</value>
</meta>
<meta>
<name>y</name>
<value>1</value>
</meta>
</metas>
</course>
</Student>
</department>
metadata.xml
<metadata>
<studentgroup category="science">
<reference href="chunked/a.xml"/>
<reference href="chunked/b.xml"/>
</studentgroup>
<studentgroup category="history">
<reference href="chunked/a.xml"/>
<reference href="chunked/c.xml"/>
</studentgroup>
a.xml
<learner>
<ref>001</ref>
<name>John</name>
<age>14</age>
<course>
<refnum>A1</refnum>
<math>B</math>
<english>B</english>
<metas>
<info>
<name>x</name>
<value>0</value>
</info>
<info>
<name>y</name>
<value>1</value>
</info>
</metas>
</course>
<course>
<refnum>B1</refnum>
<government>A+</government>
<math>A</math>
<english>B</english>
</course>
b.xml
<learner>
<ref>002</ref>
<name>Tom</name>
<age>13</age>
<course>
<refnum>C1</refnum>
<gym>A</gym>
<geography>incomplete</geography>
<metas>
<info>
<name>x</name>
<value>2</value>
</info>
<info>
<name>y</name>
<value>1</value>
</info>
</metas>
</course>
c.xml
<learner>
<ref>006</ref>
<name>Harry</name>
<age>13</age>
<course>
<gym>A</gym>
<geography>incomplete</geography>
<metas>
<info>
<name>x</name>
<value>2</value>
</info>
<info>
<name>y</name>
<value>1</value>
</info>
</metas>
</course>
Обязательный выход: (не в состоянии поместить HTML-код)
Department Name Science
Department Location LON
Roll Number oo1
---------------------------------------------------------
Base XML Chucked XML Equal?
Name John John Yes
Age 14 14 Yes
Course A1
Math A B No
English B B Yes
Meta x
name x x Yes
value 0 o Yes
Meta y
name y y Yes
value 1 1 Yes
Course B1
Government A+ A+ Yes
Math A A Yes
English B B Yes
---------------------------------------------------------
Department Name Science
Department Location LON
Roll Number oo2
---------------------------------------------------------
Base XML Chucked XML Equal?
Name Tom Tomcat No
Age 13 13 Yes
Course C1
gym A A Yes
geography incomplete incomplete Yes
Meta x
name x x Yes
value 2 2 Yes
Meta y
name y y Yes
value 1 1 Yes
Meta z
name z NA NO
value 1 NA NO
---------------------------------------------------------
Я пытаюсь следующий, но не уверен, как это сделать мультипликатор для-каждого цикла:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<head> </head>
<body>
<xsl:apply-templates select="node()|@*"/>
</body>
</html>
</xsl:template>
<xsl:template match="department">
<xsl:variable name="depName">
<xsl:value-of select="name"/>
</xsl:variable>
<xsl:variable name="depLocation">
<xsl:value-of select="location"/>
</xsl:variable>
<table style="width:100%">
<tr>
<td>Department Name</td>
<td>
<xsl:value-of select="$depName"/>
</td>
<td/>
<td/>
<td/>
<td/>
</tr>
<tr>
<td>Department Location</td>
<td>
<xsl:value-of select="$depLocation"/>
</td>
<td/>
<td/>
<td/>
<td/>
</tr>
<xsl:for-each select="Student">
<xsl:variable name="rollNum" select="rollNum"/>
<xsl:variable name="metaXML"
select="document('metadata.xml')/metadata/studentgroup[@category='science']/reference/@href"/>
<xsl:variable name="chuckedXML"/>
<tr>
<td>Roll Number</td>
<td>
<xsl:value-of select="rollNum"/>
</td>
<td>
<xsl:value-of select="$metaXML"/>
</td>
<td/>
<td/>
<td/>
</tr>
<tr>
<td/>
<td/>
<td/>
<td>Base XML</td>
<td>Chuncked XML</td>
<td>Equal?</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="text()"/>
Я пытаюсь здесь:
для каждого «отдела/name 'в файле base.xml соответствуют категории метаданных/studentgroup/@ в метаданных.xml.
для каждого отдела/ученика/@ rollNum match with chucked file 'metadata/studentgroupp [@category]/reference' найти соответствующий chunked xml 'learner/ref'.
сравнить значения.
Аналогичным образом перебирают теги «metas/meta», где «имя» должно быть уникальным идентификатором.
Логика Я пытаюсь поставить здесь: –
1. для каждого «отдела/имя» правильно выбрать метаданные/studentgroup/@ категории от metadata.xml. 2.для каждого раздела/студента/@ rollNum матч с метафорическим файлом 'metadata/studentgroup/refence' найдите «ученик/ref». 3. Сравните значения. –
Пожалуйста, используйте ссылку для редактирования ниже вопроса, чтобы добавить новую информацию, а не комментарии. – Dijkgraaf