Я пытаюсь объединить 2 xml документа, беря некоторые значения атрибутов в первом и вводя их в другой.XSLT недоразумение document() function
Мой первый XML: Manual.xml имеет такой вид: У меня есть что-то вроде 5 000 задач, как следующие:
<task chapnbr="05"
sectnbr="11"
subjnbr="04"
pgblknbr="08"
breaknbr="001"
confnbr=""
confgtxt=""
func="200"
seq="001"
confltr=""
chg="u"
key="t051104200001"
revdate="20070615">
<effect effrg="ALL">
Второй XML я обращаться: Dictionary.xml:
<dictionary engine="CFM56" version="3" manual="ESM">
<task oldkey="T050000870001"
newkey="TKESM050000870001"
chapnbr="05"
sectnbr="00"
subjnbr="00"
func="870"
seq="001">
<title>GENERAL - INTRODUCTION</title>
</task>
<task oldkey="T051100200001"
newkey="TKESM051100200001"
chapnbr="05"
sectnbr="11"
subjnbr="00"
func="200"
seq="001">
<title>LIFE LIMITS OF ENGINE ROTATING PARTS</title>
</task>
<task oldkey="T051101200001"
newkey="TKESM051101200001"
chapnbr="05"
sectnbr="11"
subjnbr="01"
func="200"
seq="001">
<title>FAN ROTOR - LIFE LIMITS</title>
</task>
<task oldkey="T051102200001"
newkey="TKESM051102200001"
chapnbr="05"
sectnbr="11"
subjnbr="02"
func="200"
seq="001">
<title>HIGH PRESSURE COMPRESSOR ROTOR - LIFE LIMITS</title>
</dictionary>
Мне нужно принять значение атрибута «seq» в словаре и заменить его в Руководстве, если атрибут «старый ключ» в Словаре равен атрибуту «ключ» в Руководстве.
Для этого я написал эту XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions">
<xsl:output
encoding="UTF-8"
method="xml"
indent="yes"
omit-xml-declaration="yes"
cdata-section-elements="comments"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="@seq[parent::task]">
<xsl:variable name="oldkey" select="upper-case(../@key)"/>
<xsl:attribute name="seq">
<xsl:value-of select="document('./Dictionary.xml')/dictionary/task[@oldkey=$oldkey]/@seq"/>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
Но результат я получить то, что все значения «SEQ» изменены и заменены пробелом в Руководстве. Вот пример вывода:
<task chapnbr="72"
sectnbr="00"
subjnbr="00"
pgblknbr="01"
breaknbr="011"
confnbr=""
confgtxt=""
func="810"
seq=""
confltr=""
chg="u"
key="t720000810011"
revdate="19981015">
Я думаю, что моя проблема исходит из того, как я использовать функцию документа(), но я попробовал много вещей, и ничего не меняется. Результат остается неизменным, мне не удается получить другое значение, кроме пробела в атрибуте «seq» моего выходного файла Manual.
Мне нужно получить выход, где значение атрибута «seq» составлено из 3 целых чисел и считано из Dictionnary. Что-то нравится, что:
<task chapnbr="72"
sectnbr="00"
subjnbr="00"
pgblknbr="01"
breaknbr="011"
confnbr=""
confgtxt=""
func="810"
seq="001"
confltr=""
chg="u"
key="t720000810011"
revdate="19981015">
Чтобы быть более точным о моем ввода/outuput файла (Manual.xml). Полный файл следующего вида:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE EM [<!ENTITY g1105335-00 SYSTEM " file://D:/Indigo_AP/Load_CFM56-3/5- Inputs/../Arts/1105335-00.tif" NDATA ccitt4>
<!ENTITY g1105336-00 SYSTEM " file://D:/Indigo_AP/Load_CFM56-3/5-Inputs/../Arts/1105336-00.tif" NDATA ccitt4 >
<!-- A lot of Doctype declaration -->
<em spl="062W0"
model="CFM56-3"
oidate="19831231"
tsn="71"
docnbr="CFMI-TP_SM_5"
lang="english"
revdate="20131215"
chg="u">
<title>CFM56-3 Engine Manual</title>
<!-- Many child elements -->
<chapter chapnbr="05" chg="u" key="c05" revdate="20121215">
<title>TIME LIMITS AND MAINTENANCE CHECKS</title>
<section chapnbr="05"
sectnbr="00"
chg="u"
key="cs0500"
revdate="20121215">
<title>GENERAL</title>
<subject chapnbr="05"
sectnbr="00"
subjnbr="00"
chg="u"
key="css050000"
revdate="20121215">
<title>GENERAL - INTRODUCTION</title>
<pgblk chapnbr="05"
sectnbr="00"
subjnbr="00"
pgblknbr="00"
breaknbr="001"
chg="u"
key="p05000000001000"
revdate="20121215">
<title>GENERAL - INTRODUCTION</title>
<task chapnbr="05"
sectnbr="00"
subjnbr="00"
pgblknbr="00"
breaknbr="001"
confnbr=""
confgtxt=""
func="870"
seq="001"
confltr=""
chg="u"
key="t050000870001"
revdate="20121215">
<effect effrg="ALL"></effect>
<title>GENERAL - INTRODUCTION</title>
<!-- Many child elements -->
</task>
</pgblk>
</subject>
</section>
<section chapnbr="05"
sectnbr="11"
chg="u"
key="cs0511"
revdate="20121215">
<title>LIFE LIMITS</title>
<subject chapnbr="05"
sectnbr="11"
subjnbr="00"
chg="u"
key="css051100"
revdate="20070615">
<title>LIFE LIMITS</title>
<pgblk chapnbr="05"
sectnbr="11"
subjnbr="00"
pgblknbr="08"
breaknbr="001"
chg="u"
key="p05110008001000"
revdate="20070615">
<title>LIFE LIMITS OF ENGINE ROTATING PARTS</title>
<task chapnbr="05"
sectnbr="11"
subjnbr="00"
pgblknbr="08"
breaknbr="001"
confnbr=""
confgtxt=""
func="200"
seq="001"
confltr=""
chg="u"
key="t051100200001"
revdate="20070615">
<effect effrg="ALL"></effect>
<title>LIFE LIMITS OF ENGINE ROTATING PARTS</title>
<!-- Many child elements -->
</task>
</pgblk>
</subject>
<subject chapnbr="05"
sectnbr="11"
subjnbr="01"
chg="u"
key="css051101"
revdate="20070615">
<title>FAN ROTOR - LIFE LIMITS</title>
<pgblk chapnbr="05"
sectnbr="11"
subjnbr="01"
pgblknbr="08"
breaknbr="001"
chg="u"
key="p05110108001000"
revdate="20070615">
<title>FAN ROTOR - LIFE LIMITS</title>
<task chapnbr="05"
sectnbr="11"
subjnbr="01"
pgblknbr="08"
breaknbr="001"
confnbr=""
confgtxt=""
func="200"
seq="001"
confltr=""
chg="u"
key="t051101200001"
revdate="20070615">
<effect effrg="ALL"></effect>
<title>FAN ROTOR - LIFE LIMITS</title>
<!-- Many child elements -->
</task>
</pgblk>
</subject>
</section>
</chapter>
</em>
Пожалуйста, пост минимален, но ** полные ** примеры вашего ввода и ожидаемого результата. В настоящее время оба ваших входных документа не являются хорошо сформированным XML. –
Мои входы и выходы состоят из более чем двух миллионов строк, поэтому я разместил только образцы. – Charpi
Образцы в порядке, но они должны быть хорошо сформированы. –