LINUX.ORG.RU

> Вопрос по XSLT (на входе 2 xml на выходе один), 2 xml, 1 xsl (из одного берем данные из второго аттрибуты для элементов)


1

2

Привет.Подскажите пожалуйста в решении одной задачи. Есть два файла xml и один xsl. Хочу сделать так, чтобы xsl брал данные и обрабатывал из одного файла, а атрибуты для элементов из другого.

1) файл с данными content.xml

<?xml version="1.0" encoding="UTF-8"?>
<info>
<name>Firma</name>
<adresse>Uliza Lenina</adresse> 
</info>

2) файл с атрибутами atrib.xml

<?xml version="1.0" encoding="UTF-8"?>
<styles>
<font>Calibri</font>
<size>12</size>
</styles>

2) файл xslt styles.xsl неудачная попытка

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	
<xsl:template match="info">
<text font="document('atrib.xml')/styles/font"><xsl:value-of select="name"/></text>
<format size="document('atrib.xml')/styles/size"><xsl:value-of select="adresse"/></format>

</xsl:template>
</xsl:stylesheet>

3) на выходе получается:

<?xml version="1.0" encoding="UTF-16"?>
<text font="document('a.xml')/styles/font">Firma</text>
<format size="document('a.xml')/styles/size">Uliza Lenina</format>

3.1) А хотелось бы:

<?xml version="1.0" encoding="UTF-16"?>
<text font="Calibri">Firma</text>
<format size="32">Uliza Lenina</format>

Буду признателен за любую помощь! Зараннее спасибо


в {} возьми обращение к стороннему файлу. Т.е.

arkhnchul@tween-arkhost:/tmp$ cat style.xsl 
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="info">
    <text font="{document('attrib.xml')/styles/font}"><xsl:value-of select="name"/></text>
    <format size="{document('attrib.xml')/styles/size}"><xsl:value-of select="adresse"/></format>

</xsl:template>
</xsl:stylesheet>
arkhnchul@tween-arkhost:/tmp$ xsltproc style.xsl a.xml 
<?xml version="1.0"?>
<text font="Calibri">Firma</text><format size="12">Uliza Lenina</format>

arkhnchul ★★
()

Аттрибуты задаются так: attr=«{value}»

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	
<xsl:variable name="styles" select="document('atrib.xml')/styles"/>

<xsl:template match="info">
<text font="{$styles/font}"></text>
<format size="{$styles/size}"><xsl:value-of select="adresse"/></format>

</xsl:template>
</xsl:stylesheet>
amidala
()

Вместо

<text font="document('atrib.xml')/styles/font"><xsl:value-of select="name"/></text>

надо

<text>
  <xsl:attribute name="font">
    <xsl:value-of select="document('atrib.xml')/styles/font" />
  </xsl:attribute>
  <xsl:value-of select="name"/>
</text> 

fopen ★★
()

Решение нашел, может кому пригодиться!

1)файл с данными content.xml

<?xml version="1.0" encoding="UTF-8"?>
<info>
<name>Firma</name>
<adresse>uliza Lenina</adresse> 
</info>

2) файл с атрибутами atrib.xml

<?xml version="1.0" encoding="UTF-8"?>
<styles>
<font>Calibri</font>
<size>12</size>
</styles>

2) файл xslt styles.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
	
<xsl:template match="info">
<text font="document('atrib.xml')/styles/font"><xsl:value-of select="name"/></text>
<format size="document('atrib.xml')/styles/size"><xsl:value-of select="adresse"/></format>

</xsl:template>
</xsl:stylesheet>

3) на выходе :

<?xml version="1.0" encoding="UTF-16"?>
<text font="Calibri">Firma</text>
<format size="12">uliza Lenina</format>

wladst
() автор топика
Ответ на: комментарий от amidala

Благодарю!

Спасибо за помощь, иммено это решение я тоже нашел!

wladst
() автор топика

Спасибо всем за помощь!

Не ожидал что так быстро мой вопрос будет решен. Спасибо! Классный форум!

wladst
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.