xslt 2.0 вставка в произвольный узел
От: nikinikiniki  
Дата: 15.06.15 12:55
Оценка:
Добрый день, уважаемые гуру.
Помогите, пожалуйста, решить следующую проблему в xslt 2.0 (saxon) .
Имеется примерно вот такой xml (было / стало)
<root>
  <a id="a1"></a>
  <a id="a2"></a>
  
  <b id="b1" ref="a1">
    <b_prop>some_val_1</b_prop>
  </b>
  <b id="b2" ref="a2">
    <b_prop>some_val_2</b_prop>
  </b>
</root>


<root>
  <a id="a1" >
    <a_prop>some_val_1</a_prop>
  </a>
  <a id="a2" >
    <a_prop>some_val_2</a_prop>
  </a>
   
  <b id="b1" ref="a1"/>
  <b id="b2" ref="a2"/>
</root>


Необходимо при помощи xslt перенести значения узлов b_prop в узлы a_prop "соответствующих" узлов a
Соответствие узлов a и b находится по атрибутам id и ref
таким образом, что:

Псевдо-xslt-код:
0. current_b_prop_text = /root/b_prop/text()
1. current_b_prop_test_id = /root/b_prop/../@ref
2. target_a_node = /root/a[@id=$current_b_prop_test_id]

вот в этот $target_a_node и надо добавить новый узел a_prop и в него записать значение из $current_b_prop_text
а сам узел b_prop — "удалить"

<xsl:template match="b_prop">
<!-- вот тут непонятно, как записать в произвольный xml узел в output -->
</xsl:template>

Заранее благодарен за помощь!
Re: xslt 2.0 вставка в произвольный узел
От: Igorxz  
Дата: 01.07.15 20:50
Оценка:
Здравствуйте, nikinikiniki, Вы писали:

думаю, тут вообще xslt делу не поможет. xslt это что — трансформация/преобразование входного потока в выходной.
тут другой случай, ближе к XQuery.
Re: xslt 2.0 вставка в произвольный узел
От: dmitry_npi Россия  
Дата: 05.02.16 09:58
Оценка:
Здравствуйте, nikinikiniki, Вы писали:

Ответ, наверно, уже не нужен, но пусть будет на форуме:


<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
  version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" version="1.0" indent="yes" />
   
  <xsl:template match="root">
    <root>
        <xsl:apply-templates select="./a"/>
    </root>
  </xsl:template>
  
  <xsl:template match="a">
    <xsl:variable name="id" select="@id"/>
    <a>
        <xsl:attribute name="id">
            <xsl:value-of select="@id"/>
         </xsl:attribute>
         <a_prop><xsl:value-of select="//b[@ref=current()/@id]/b_prop"/></a_prop>
    </a>
  </xsl:template>
  
</xsl:stylesheet>


Это даже не 2.0, для проверки использовался Xsltproc.exe.
Атмосферная музыка — www.aventuel.net
Re[2]: xslt 2.0 вставка в произвольный узел
От: Аноним931 Германия  
Дата: 22.04.16 12:30
Оценка:
I>думаю, тут вообще xslt делу не поможет
Да вообще-то классическая задача именно для XSLT.

I>xslt это что — трансформация/преобразование входного потока

Документа, не потока. Входной документ целиком захерачивается в RAM, и потом по нему прыгается туды-сюды.
"Больше 100кмч можно ехать на автобане в любом ряду кроме правого крайнего" (c) pik
"В германии земля в частной собственности" (c) pik
"Закрывать школы, при нулевой смертности среди детей и подростков, это верх глупости" (c) Abalak
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.